링크 : https://www.acmicpc.net/problem/2606
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Main {
private static ArrayList<ArrayList<Integer>> adjacentList;
private static boolean[] visited;
private static int count;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int m = Integer.parseInt(br.readLine());
// 컴퓨터들의 연결 정보
adjacentList = new ArrayList<>();
for (int i = 0; i <= n; i++) {
adjacentList.add(new ArrayList<>());
}
visited = new boolean[n + 1]; // 방문 여부 체크
count = 0; // 1번 컴퓨터와 바이러스에 감염된 컴퓨터 개수를 저장
for (int i = 0; i < m; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
adjacentList.get(a).add(b);
adjacentList.get(b).add(a);
}
dfs(1);
System.out.println(count);
}
private static void dfs(int start) {
if (visited[start]) {
return;
}
visited[start] = true;
for (Integer i : adjacentList.get(start)) {
if (!visited[i]) {
count++;
dfs(i);
}
}
}
}
컴퓨터의 개수(n)는 7이고, 네트워크 상 연결 쌍(m)의 개수는 6입니다.
1부터 7까지의 인덱스로 이루어진 인접 리스트(adjacentList)를 초기화합니다.
다음은 입력된 연결 쌍에 따라 인접 리스트를 채웁니다.
adjacentList[1] = [2, 5]
adjacentList[2] = [1, 3, 5]
adjacentList[3] = [2]
adjacentList[4] = [7]
adjacentList[5] = [1, 2, 6]
adjacentList[6] = [5]
adjacentList[7] = [4]