[백준/파이썬] 2606번 바이러스 풀이

업데이트:



문제 정보


풀이

문제

1번 컴퓨터와 연결된(직접 또는 간접) 모든 컴퓨터가 바이러스에 감염됩니다. 전체 네트워크 연결 정보가 주어질 때, 1번을 제외한 감염 컴퓨터 수를 구하면 됩니다.

코드

n = int(input())
coms = []
for _ in range(int(input())):
    coms.append(tuple(map(int, input().split())))
infected = {1}

i = 0
flag = False
while True:
    if len(coms) == 0 or i + 1 == len(coms) and not flag: break
        
    if coms[i][0] in infected:
        infected.add(coms[i][1])
        coms.pop(i)
        flag = True
    elif coms[i][1] in infected:
        infected.add(coms[i][0])
        coms.pop(i)
        flag = True
    else: i += 1

    if i == len(coms) and flag:
        i = 0
        flag = False
        
print(len(infected)-1)

설명

infected 집합에 감염된 컴퓨터를 유지하고, 간선 목록을 반복 순회하면서 한쪽이라도 감염된 간선은 반대쪽도 감염 처리합니다.

  • 새 감염이 발생하면 처음부터 다시 순회
  • 더 이상 감염 확장이 없으면 종료

최종적으로 len(infected) - 1이 정답입니다.



댓글남기기