포스트

[python] 백준 2606 - 바이러스

백준 2606 - 바이러스 [SILVER 3]

N개의 컴퓨터와 N개의 연관 관계가 있다.
1번 컴퓨터가 바이러스에 감염되었을 때, 1번 컴퓨터로 인해 몇 개의 컴퓨터가 바이러스에 감염되었는가?

BFS

매우 간단한 BFS 문제다.

특별한 조건 없이, 1번 컴퓨터로 인해 감염된 컴퓨터의 개수만 구하면 된다.

컴퓨터를 N+1의 리스트로 만들고, 연관 관계를 상호간으로 리스트에 넣어준 뒤

1번부터 시작하여 BFS로 순회하면서, 방문한 노드에 대한 정보를 기록하여

1번을 제외한, 방문한 적 있는 컴퓨터의 갯수만 나타내면 된다.

정답 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import sys

input = sys.stdin.readline

N = int(input())
route = [[] for _ in range(N+1)]

for i in range(int(input())):
    s, e = map(int, input().split())
    
    route[s].append(e)
    route[e].append(s)

Q = route[1].copy()
visited = [0] * (N+1)
visited[1] = 1

while Q:
    n = Q.pop(0)
    if not visited[n]:
        visited[n] = 1
        Q.extend(route[n])

print(sum(visited[2:]))

결과는 다음과 같다.

메모리시간코드 길이
31120KB40ms391B
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.