본문 바로가기
코딩테스트

[백준][파이썬]2060번: 바이러스

by 과아아앙 2021. 4. 6.

문제 출처 : www.acmicpc.net/problem/2606

 

2606번: 바이러스

첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어

www.acmicpc.net

내 풀이

보자마자 일전에 풀었던 양방향 그래프가 생각났다.

새로운 배열에 넣기보다 이전에 풀었던 것 처럼 dict를 이용해서 풀면 간단 할 것 같았다.

각 dict에 연결된 컴퓨터들을 집어넣고 연결된 것이 있는지 돌리니 간단히 해결 됐다.

n = int(input())
m = int(input())

computer = dict()
virus = []
check_virus = []

def check(y):
    if y in computer:
        for i in computer[y]:
            if i not in virus and i not in check_virus:
                virus.append(i)
    return 0
for i in range(m):
    x, y = map(int, input().split())
    if x not in computer:
        computer[x] = list()
    if y not in computer:
        computer[y] = list()
    computer[x].append(y)
    computer[y].append(x)

for i in computer[1]:
    virus.append(i)
    while virus:
        a = virus.pop(0)
        if a not in check_virus:
            check_virus.append(a)
        check(a)

print(len(check_virus) - 1)