방문하지 않은 곳(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 |