백준 11724
백준 11724 문제
import java.io.*;
import java.util.*;
public class Boj11724 {
static boolean[] visited;
static ArrayList<Integer>[] edgeList;
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());
visited = new boolean[n + 1];
edgeList = new ArrayList[n + 1];
for (int i = 1; i < n + 1; i++) {
edgeList[i] = new ArrayList<>();
}
for (int i = 0; i < m; i++) {
st = new StringTokenizer(br.readLine());
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
edgeList[start].add(end);
edgeList[end].add(start);
}
int count = 0;
for (int i = 1; i <= n; i++) {
if (!visited[i]) {
count++;
dfs(i);
}
}
System.out.println(count);
br.close();
}
private static void dfs(int start) {
visited[start] = true;
for (int i : edgeList[start]) {
if (!visited[i]) {
dfs(i);
}
}
}
}
풀이
- 노드의 개수를
n 변수에 담는다.
- 에지의 개수를
m 변수에 담는다.
- 방문 기록을 저장할
booleean형 배열 visited를 생성한다. (0은 사용하지 않을 것이기에 n+1길이로 생성)
- 그래프 데이터의 인접한 노드들을 담을 인접 리스트(
ArrayList)를 배열을 edgeList 변수에 생성
edgeList 배열을 돌면서 new ArrayList()를 통해 초기화한다.
edgeList 인접 리스트에 인접한 노드들 저장한다.
- 연결 요소의 개수
count 변수로 생성한다.
n만큼 반복하면서 방문하지 않은 노드가 있다면 연결 요소 개수를 증가시키고, dfs() 실행한다.
- 방문하지 않은 노드면 방문을 기록하고 인접한 노드들 중에서 방문하지 않은 노드가 있다면 해당 노드로
dfs()를 재귀 호출한다.