[Algorithm] 99클럽 코테 스터디 8일차 TIL | 백준_단지번호붙이기(2667번)

2025. 1. 22. 13:56·Algorithm

https://www.acmicpc.net/problem/2667


N x N 크기의 map을 선언하고

0또는 1값을 배열에 넣어준다.

 

단지 내 집의 수를 count 변수로, 

총 단지수를 total 변수로 선언하였다.

 

단지 내 집의 수를 오름차순으로 정렬하여 출력해야하므로 PriorityQueue를 사용하였다.

 

map에서 방문 처리는 map[i][j]=0으로 값을 바꿔주고, map이 0보다 큰 값인 위치의 배열값만 검사하도록 한다!

 

처음에 3%에서 틀렸습니다가 나왔는데

단지 내 처음 집을 찾았을 때 방문 처리를 하지 않았던 것이 원인이었다..!!

for(int i = 0; i < N; i++){
    for(int j = 0; j < N; j++){
        if(map[i][j] > 0){
            count = 1; 
            map[i][j] = 0; //방문처리
            total++;
            dfs(map, i, j, N);
            pq.add(count);
        }
    }
}

 

전체 풀이

import java.io.*;
import java.util.PriorityQueue;

class Main{
    static int count;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int[][] map = new int[N][N];
        for(int i = 0; i < N; i++){
            String str = br.readLine();
            for(int j = 0; j < N; j++){
                map[i][j] = str.charAt(j) - '0';
            }
        }
        int total = 0;
        StringBuilder sb = new StringBuilder();
        PriorityQueue<Integer> pq = new PriorityQueue<>();
        for(int i = 0; i < N; i++){
            for(int j = 0; j < N; j++){
                if(map[i][j] > 0){
                    count = 1;
                    map[i][j] = 0;
                    total++;
                    dfs(map, i, j, N);
                    pq.add(count);
                }
            }
        }
        sb.append(total);
        while(!pq.isEmpty()){
            sb.append("\n").append(pq.poll());
        }
        System.out.println(sb);
    }
    public static void dfs(int[][] map, int x, int y, int N){
        int[] dx = {-1, 0, 1, 0};
        int[] dy = {0, -1, 0, 1};

        for(int i = 0; i < 4; i++){
            int dx_x = x + dx[i];
            int dy_y = y + dy[i];

            if(dx_x >= 0 && dx_x < N && dy_y >= 0 && dy_y < N){
                if(map[dx_x][dy_y] > 0){
                    count++;
                    map[dx_x][dy_y] = 0;
                    dfs(map, dx_x, dy_y, N);
                }
            }
        }
    }
}

 

단지 내 오름차순이 문제의 조건이었음을 제출 후 알게되었다..문제를 꼼꼼히 읽어야겠따

 

 

'Algorithm' 카테고리의 다른 글

[Algorithm] 99클럽 코테 스터디 10일차 TIL | 백준_빙산(2573번)  (4) 2025.01.24
[Algorithm] 99클럽 코테 스터디 9일차 TIL | 백준_이분 그래프(1707번)  (0) 2025.01.23
[Algorithm] 99클럽 코테 스터디 7일차 TIL | 백준_숨바꼭질(1697번)  (1) 2025.01.21
[Algorithm] 99클럽 코테 스터디 6일차 TIL | 백준_DFS와 BFS(1260번)  (4) 2025.01.20
[Algorithm] 99클럽 코테 스터디 5일차 TIL | 백준_두 용액(2470번)  (0) 2025.01.17
'Algorithm' 카테고리의 다른 글
  • [Algorithm] 99클럽 코테 스터디 10일차 TIL | 백준_빙산(2573번)
  • [Algorithm] 99클럽 코테 스터디 9일차 TIL | 백준_이분 그래프(1707번)
  • [Algorithm] 99클럽 코테 스터디 7일차 TIL | 백준_숨바꼭질(1697번)
  • [Algorithm] 99클럽 코테 스터디 6일차 TIL | 백준_DFS와 BFS(1260번)
dev_ajrqkq
dev_ajrqkq
알고리즘 천재가 될 거야
  • dev_ajrqkq
    기록이 자산이다
    dev_ajrqkq
  • 전체
    오늘
    어제
    • 분류 전체보기 (146) N
      • Front-end (0)
      • Back-end (11)
        • Spring (1)
        • Java (8)
      • CS (9)
        • 데이터베이스 (5)
        • 네트워크 (4)
      • Algorithm (79) N
      • 이것저것 (0)
      • 버그잡기 (1)
      • TIL (37)
      • 후기 (1)
      • 취준 (0)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      개발자취업
      코딩테스트준비
      TypeScript
      99클럽
      티스토리챌린지
      항해99
      Til
      오블완
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.2
    dev_ajrqkq
    [Algorithm] 99클럽 코테 스터디 8일차 TIL | 백준_단지번호붙이기(2667번)
    상단으로

    티스토리툴바