카테고리 없음

[백준] 2606 바이러스(Python)

ziasu 2021. 10. 12. 19:57
반응형

1. 생각정리

  • 문제를 좀 풀다 보니까 대충 감은 오는 것 같다
  • 연결 정보는 이차원 리스트에 (1행에 1과 연결된 요소들 다 넣기, 2행에 2와 연결된 요소들 다 넣기...)의 느낌으로 입력받고, n+1 크기의 일차원 리스트를 통해 바이러스에 걸리는 것을 확인했는지 여부를 체크해준다
  • 컴퓨터의 수가 적으므로, DFS로 모든 연결정보를 탐색하고, visited정보를 바꿀 때마다 결괏값+=1 해주어 최종 바이러스 걸린 컴퓨터 개수를 도출한다

 

2. 코드 구현

from collections import deque
#컴퓨터의 수 1<=n<=100
n = int(input())
#연결 수
m = int(input())
#m만큼 연결 정보
mapp = [[] for _ in range(n+1)]
visited = [False]*(n+1)
for _ in range(m):
    x,y = map(int, input().split())
    mapp[x].append(y)
    mapp[y].append(x)

for i in mapp:
    i.sort()
    
def bfs():
    result = 0
    q=deque([1])
    while q:        
        temp = q.popleft()
        if not visited[temp]:
            visited[temp] = True
            result+=1
            for i in mapp[temp]:
                if not visited[i]:
                    q.append(i)                    
    print(result-1)    
bfs()
반응형