Playground/자바문제집

[백준] 11724번

미숫가루설탕많이 2023. 5. 21. 23:15

방문하지 않은 곳(visited[] 가 false)들을 dfs로 순회하고 dfs 메서드가 돌아갈 때마다 count를 1씩 증가시켜줬다.

 

public class Main {

    static int[][] map;
    static boolean[] visited;
    static int N;
    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());   // 정점의 개수
        int M = Integer.parseInt(st.nextToken());   // 간선의 개수
        map = new int[N + 1][N + 1];
        visited = new boolean[N + 1];
        int count = 0;  // 연결 요소 수

        for (int i = 0; i < M; i++) {
            st = new StringTokenizer(br.readLine());
            int x = Integer.parseInt(st.nextToken());
            int y = Integer.parseInt(st.nextToken());

            // 양방향 설정
            map[x][y] = 1;
            map[y][x] = 1;
        }

        for (int i = 1; i <= N; i++) {
            if (!visited[i]) {
                dfs(i);
                count++;
            }
        }

        System.out.println(count);
    }

    private static void dfs(int start) {
        visited[start] = true;

        for (int i = 1; i <= N; i++) {
            if (map[start][i] == 1 && !visited[i]) {
                dfs(i);
            }
        }
    }
}

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

[백준] 1049번  (0) 2023.05.23
[백준] 14469번  (0) 2023.05.22
[백준] 2667번  (0) 2023.05.18
[백준] 1697번  (0) 2023.05.17
[백준] 1012번  (0) 2023.05.16