주의할 점
- 컴퓨터 초기화할 때 양방향을 오고갈 수 있다.
- 바이러스의 시작은 1번이다.
- 배열 초기화 할 때, 컴퓨터는 1번부터 시작되니 N+1로 해야한다.
import java.io.*;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class P2606 {
static int N, M;
static boolean[][] computer;
public static void main(String[] args) throws IOException {
BufferedReader br = new BuffereReader(new InputStreamReader(System.in));
StringTokenizer str;
int count = 0;
// 컴퓨터 수
N = Integer.parseInt(new StringTokenizer(br.readLine()).nextToken());
// 노드 수
M = Integer.parseInt(new StringTokenizer(br.readLine()).nextToken());
computer = new boolean[N + 1][N + 1];
boolean[] visited = new boolean[N+1];
// 컴퓨터 초기화
for (int i = 0; i < M; i++) {
str = new StringTokenizer(br.readLine());
int a = Integer.parseInt(str.nextToken());
int b = Inteber.parseInt(str.nextToken());
computer[a][b] = true;
computer[b][a] = true;
}
Queue<Integer> queue = new LinkedList<>();
queue.add(1);
visited[1] = true;
while (!queue.isEmpty()) {
int start = queue.poll();
for(int i = 1; i <= N; i++) {
// visited[] => 컴퓨터 방문 배열
if(!visited[i] && computer[start][i]) {
queue.add(i);
visited[i] = true;
count++;
}
}
}
System.out.println(count);
}
}
아이디어를 떠올리는 것은 어렵지 않았지만, 접근을 잘못하였다.