코딩 테스트/백준
[Python] 백준 2606 바이러스
위시리
2025. 3. 11. 14:23


문제 분석
- 한 컴퓨터가 바이러스에 걸리면 그 컴퓨터와 네트워크 상에 연결되어 있는 모든 컴퓨터는 바이러스에 걸린다.
- 바이러스에 걸린 컴퓨터가 주어졌을 때 바이러스에 걸리게 되는 컴퓨터의 수 출력
풀이
- dfs, bfs
정답 코드
import sys
input = sys.stdin.readline
from collections import deque
v = int(input()) # 컴퓨터 수
e = int(input()) # 네트워크 연결된 쌍의 수
com = [[0] * (v+1) for _ in range(v+1)] # 컴퓨터가 1부터 시작)
for _ in range(e) :
a,b = map(int, input().split())
com[a][b] = com[b][a] = 1
v_dfs = [0] * (v+1)
v_bfs = [0] * (v+1)
cnt_dfs = 0
cnt_bfs = 0
# 깊이 우선 탐색 -> 큐
def dfs(n) :
global cnt_dfs
v_dfs[n] = 1
cnt_dfs += 1
for i in range(1, v+1) : # 컴퓨터 1~(n+1)
if v_dfs[i] == 0 and com[n][i] == 1 :
dfs(i)
def bfs(n) :
global cnt_bfs
d = deque()
d.append(n)
v_bfs[n] = 1
while d :
cur_n = d.popleft()
for i in range(1, v+1) :
if v_bfs[i] == 0 and com[i][cur_n] == 1 :
d.append(i)
cnt_bfs += 1
v_bfs[i] = 1
dfs(1)
print(cnt_dfs-1) # 첫번째 컴 빼기
bfs(1)
print(cnt_bfs)