문제분석
연결 요소는 엣지로 연결된 노드의 집합이므로, 한번의 DFS가 끝날 때까지 탐색한 모든 노드의 집합 = 하나의 연결 요소손으로 풀어보기


슈도코드


정답
package A0study;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class p11724_연결요소의개수 {
static ArrayList<Integer>[] A; // 그래프 데이터 저장 인접리스트
static boolean[] visited; // 방문기록 배열
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken()); // 노드 개수
int M = Integer.parseInt(st.nextToken()); // 엣지 개수
A = new ArrayList[N+1]; // 0번 인덱스 사용X (1번 인덱스부터 시작)
visited = new boolean[N+1];
// 인접리스트의 각 ArrayList 초기화
for(int i=1; i<=N; i++) {
A[i] = new ArrayList<Integer>();
}
// 인접리스트에 그래프 데이터 저장
for(int i=0; i<M; i++) {
st = new StringTokenizer(br.readLine());
int S = Integer.parseInt(st.nextToken()); // 시작점
int E = Integer.parseInt(st.nextToken()); // 종료점
// 양방향
A[S].add(E);
A[E].add(S);
}
int count = 0;
for(int i=1; i<=N; i++) {
if(!visited[i]) {
count++;
DFS(i);
}
}
System.out.println(count);
}
// DFS
private static void DFS(int v) {
if(visited[v]) {
return;
}
visited[v] = true; // 방문처리
for(int i : A[v]) { // A[v] 안에 들어있는 모든 값을 하나씩 i에 꺼내서 반복한다
if(!visited[i]) {
DFS(i);
}
}
}
}