Playground/자바문제집

[백준] 2667번

미숫가루설탕많이 2023. 5. 18. 00:01

 DFS를 통해 문제를 해결했다. 문제에 집의 수를 오름차순으로 정렬하라는 문구를 보지 않아서 인텔리제이로 코드를 실행하면 성공했지만 제출하니까 틀렸다고 나왔었다.

 문제를 꼼꼼히 확인하자..!

 

 

public class Main {

    static int N, count;
    static int[][] map;
    static boolean[][] visited;
    static List<Integer> list = new ArrayList<>();
    static int[] dx = new int[]{0, 1, 0, -1};
    static int[] dy = new int[]{1, 0, -1, 0};

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        N = Integer.parseInt(st.nextToken());   // 지도의 크기 N x N
        map = new int[N][N];
        visited = new boolean[N][N];

        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine());
            String line = st.nextToken();

            for (int j = 0; j < N; j++) {
                map[i][j] = Integer.parseInt(line.substring(j, j + 1));
            }
        }

        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                if (map[i][j] == 1 && !visited[i][j]) {
                    count = 1;
                    dfs(i, j);
                    list.add(count);
                }
            }
        }

        Collections.sort(list);
        System.out.println(list.size());
        for (int i : list) {
            System.out.println(i);
        }
    }

    private static void dfs(int i, int j) {
        visited[i][j] = true;
        int x, y = 0;

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

            if (x >= 0 && y >= 0 && x < N && y < N) {
                if (map[x][y] == 1 && !visited[x][y]) {

                    dfs(x, y);
                    count++;
                }
            }
        }
    }
}

'Playground > 자바문제집' 카테고리의 다른 글

[백준] 14469번  (0) 2023.05.22
[백준] 11724번  (2) 2023.05.21
[백준] 1697번  (0) 2023.05.17
[백준] 1012번  (0) 2023.05.16
[백준] 2178  (1) 2023.05.16