📍 1. 문제

📍 2. 풀이
- 그래프 생성
- 모든 노드 각각 방문했는지 검사하며 방문하지 않았으면 해당 노드 탐색.
- 탐색할 때 마다 count++
- count 출력
📍 3. 코드
- 인접리스트 + DFS-Recursive
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int vertex = Integer.parseInt(st.nextToken());
int edge = Integer.parseInt(st.nextToken());
boolean[] visited = new boolean[vertex + 1];
ArrayList<Integer>[] list = new ArrayList[vertex + 1];
for(int i = 0; i < list.length; i++) {
list[i] = new ArrayList<Integer>();
}
for(int i = 0; i < edge; i++) {
st = new StringTokenizer(br.readLine());
int v1 = Integer.parseInt(st.nextToken());
int v2 = Integer.parseInt(st.nextToken());
list[v1].add(v2);
list[v2].add(v1);
}
int count = 0;
for(int i = 1; i < list.length; i++) {
if(visited[i] == false) {
count++;
dfsRecursive(i, list, visited);
}
}
System.out.println(count);
}
public static void dfsRecursive(int vertex, ArrayList<Integer>[] list, boolean[] visited) {
visited[vertex] = true;
for(int e : list[vertex]) {
if(visited[e] == false) {
dfsRecursive(e, list, visited);
}
}
}
}