Skip to content

Commit 2b9d9db

Browse files
committed
[Silver III] Title: 바이러스, Time: 96 ms, Memory: 9432 KB -BaekjoonHub
1 parent 46635a7 commit 2b9d9db

File tree

2 files changed

+69
-0
lines changed

2 files changed

+69
-0
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# [Silver III] 바이러스 - 2606
2+
3+
[문제 링크](https://www.acmicpc.net/problem/2606)
4+
5+
### 성능 요약
6+
7+
메모리: 9432 KB, 시간: 96 ms
8+
9+
### 분류
10+
11+
그래프 이론, 그래프 탐색, 너비 우선 탐색, 깊이 우선 탐색
12+
13+
### 제출 일자
14+
15+
2025년 2월 8일 22:23:20
16+
17+
### 문제 설명
18+
19+
<p>신종 바이러스인 웜 바이러스는 네트워크를 통해 전파된다. 한 컴퓨터가 웜 바이러스에 걸리면 그 컴퓨터와 네트워크 상에서 연결되어 있는 모든 컴퓨터는 웜 바이러스에 걸리게 된다.</p>
20+
21+
<p>예를 들어 7대의 컴퓨터가 <그림 1>과 같이 네트워크 상에서 연결되어 있다고 하자. 1번 컴퓨터가 웜 바이러스에 걸리면 웜 바이러스는 2번과 5번 컴퓨터를 거쳐 3번과 6번 컴퓨터까지 전파되어 2, 3, 5, 6 네 대의 컴퓨터는 웜 바이러스에 걸리게 된다. 하지만 4번과 7번 컴퓨터는 1번 컴퓨터와 네트워크상에서 연결되어 있지 않기 때문에 영향을 받지 않는다.</p>
22+
23+
<p><img alt="" src="https://www.acmicpc.net/upload/images/zmMEZZ8ioN6rhCdHmcIT4a7.png" style="width: 239px; height: 157px; "></p>
24+
25+
<p>어느 날 1번 컴퓨터가 웜 바이러스에 걸렸다. 컴퓨터의 수와 네트워크 상에서 서로 연결되어 있는 정보가 주어질 때, 1번 컴퓨터를 통해 웜 바이러스에 걸리게 되는 컴퓨터의 수를 출력하는 프로그램을 작성하시오.</p>
26+
27+
### 입력
28+
29+
<p>첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하인 양의 정수이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어진다. 이어서 그 수만큼 한 줄에 한 쌍씩 네트워크 상에서 직접 연결되어 있는 컴퓨터의 번호 쌍이 주어진다.</p>
30+
31+
### 출력
32+
33+
<p>1번 컴퓨터가 웜 바이러스에 걸렸을 때, 1번 컴퓨터를 통해 웜 바이러스에 걸리게 되는 컴퓨터의 수를 첫째 줄에 출력한다.</p>
34+
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
let fs = require('fs');
2+
let input = fs.readFileSync('/dev/stdin').toString().split('\n');
3+
4+
let N = Number(input[0]);
5+
let M = Number(input[1]);
6+
7+
let computerArr = [];
8+
let visited = Array(N + 1).fill(false);
9+
10+
for (let i = 1; i <= N; i++) {
11+
computerArr[i] = [];
12+
}
13+
for (let i = 2; i <= M + 1; i++) {
14+
let [x, y] = input[i].split(' ').map(Number);
15+
computerArr[x].push(y);
16+
computerArr[y].push(x);
17+
}
18+
19+
let answer = 0;
20+
21+
const dfs = (v) => {
22+
visited[v] = true;
23+
answer++;
24+
25+
for (k of computerArr[v]) {
26+
if (!visited[k]) {
27+
dfs(k);
28+
}
29+
}
30+
};
31+
32+
dfs(1);
33+
34+
console.log(answer - 1);
35+
// 1번과 인접한 것 부터 다 털면 됨

0 commit comments

Comments
 (0)