https://www.acmicpc.net/problem/2606
문제 요약 :
1. 컴퓨터의 수 입력받기
2. 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수 입력받기
3. 입력받은 컴퓨터 쌍의 수 만큼 연결 정보 입력받기
4. 1번 컴퓨터를 통해 웜 바이러스에 걸리게 되는 컴퓨터의 수를 출력하는 프로그램을 작성
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 1. 컴퓨터의 수 입력받기
int computer = Integer.parseInt(br.readLine());
//2. 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수 입력받기
int connection = Integer.parseInt(br.readLine());
ArrayList<Integer>[] list = new ArrayList[computer + 1];
for (int i = 0; i < computer + 1; i++) {
list[i] = new ArrayList<>();
}
//3. 입력받은 컴퓨터 쌍의 수 만큼 연결 정보 입력받기
for (int i = 0; i < connection; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
// 양방향이기 때문에 둘 다 추가
list[x].add(y);
list[y].add(x);
}
//4. 1번 컴퓨터를 통해 웜 바이러스에 걸리게 되는 컴퓨터의 수를 출력하는 프로그램을 작성
System.out.println(bfs(list, computer));
}
private static int bfs (ArrayList<Integer>[] list, int computer) {
boolean[] visited = new boolean[computer + 1];
Queue<Integer> queue = new ArrayDeque<>();
queue.add(1);
visited[1] = true;
int cnt = 0;
while (!queue.isEmpty()) {
int temp = queue.poll();
for (int next : list[temp]) {
if (!visited[next]) {
visited[next] = true;
queue.add(next);
cnt++;
}
}
}
return cnt;
}
}
'알고리즘' 카테고리의 다른 글
[백준] | JAVA, 자바 | 12891번 - DNA 비밀번호 (0) | 2025.02.04 |
---|---|
[백준] | JAVA, 자바 | 21736번 - 헌내기는 친구가 필요해 (0) | 2025.02.03 |
[백준] | JAVA, 자바 | 1463번 - 1로 만들기 (0) | 2025.02.02 |
[백준] | JAVA, 자바 | 9095번 - 1, 2, 3 더하기 (0) | 2025.01.30 |
[백준] | JAVA, 자바 | 1003번 - 피보나치 함수 (2) | 2024.12.02 |