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);
}
}
}
}