728x90
반응형
2606 - 바이러스
https://www.acmicpc.net/problem/2606
문제
신종 바이러스인 웜 바이러스는 네트워크를 통해 전파됨
한 컴퓨터가 웜 바이러스에 걸리면 그 컴퓨터와 네트워크 상에서 연결되어 있는 모든 컴퓨터는 웜 바이러스에 걸리게 됨
ex. 7대의 컴퓨터가 네트워크 상에 연결
1번 컴퓨터가 웜 바이러스 걸림 -> 2, 5번 거쳐 3, 6번까지 전파되어 2, 3, 5, 6 네 대의 컴퓨터는 웜 바이러스에 걸림
But, 4번과 7번 컴퓨터: 1번 컴퓨터와 네트워크상에 연결 X -> 영향 X
입력
첫째 줄: 컴퓨터의 수 (양의 정수) <= 100, 1번부터 차례대로 번호가 매겨짐
둘째 줄: 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어짐
그 수만큼 한 줄에 한 쌍씩 네트워크 상에서 직접 연결되어 있는 컴퓨터 번호 쌍이 주어짐
출력
1번 컴퓨터가 웜 바이러스에 걸렸을 때, 1번 컴퓨터 ~> 웜 바이러스에 걸리게 되는 컴퓨터의 수
풀이
1번 컴퓨터(노드)에서 시작해서 연결된 모든 노드 찾는 문제
=> 그래프 탐색 문제
코드
import java.io.*;
import java.util.*;
// 바이러스
public class boj_2606 {
static List<Integer>[] graph;
static boolean[] visited;
static int count = 0;
public static void dfs(int node) {
visited[node] = true;
for (int next : graph[node]) {
if (!visited[next]) {
count++;
dfs(next);
}
}
}
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());
graph = new ArrayList[n + 1];
for (int i = 1; i <= n; i++) {
graph[i] = new ArrayList<>();
}
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());
graph[a].add(b);
graph[b].add(a);
}
visited = new boolean[n + 1];
dfs(1);
System.out.println(count);
}
}
728x90
반응형
'💻 > 코딩테스트' 카테고리의 다른 글
[BOJ/] 백준 2276 - 암기왕 (Java) (0) | 2025.05.16 |
---|---|
[BOJ/] 백준 2293 - 동전 1 / 2294 - 동전 2 (Java) (0) | 2025.05.16 |
[BOJ/] 백준 1197 - 최소 스패닝 트리 (Java) (0) | 2025.05.16 |
[BOJ/] 백준 1260 - DFS와 BFS (Java) (0) | 2025.05.16 |
[BOJ/플로이드 알고리즘] 백준 11404 - 플로이드 / 11780 - 플로이드 2 (Java) (0) | 2025.05.01 |