백준 2606 - 바이러스 (Python3)
코드
# 컴퓨터의 수 (1 ~ 100) (노드의 개수)
v = int(input())
# 연결되어 있는 컴퓨터 쌍의 수 (간선의 개수)
e = int(input())
# 연결 상태를 입력받을 리스트
# 인덱스 번호와 노드 번호를 통일시키기 위해서 N + 1 크기로 만듬
link = [[] for _ in range(v+1)]
# 컴퓨터 간의 연결 상태
for _ in range(e):
a, b = map(int, input().split())
link[a].append(b)
link[b].append(a)
def dfs(link, v, visited):
visited[v] = True
for i in link[v]:
if not visited[i]:
dfs(link, i, visited)
# 1번 컴퓨터가 방문하였는지 체크할 리스트
visited = [False] * len(link)
# 1번 컴퓨터가 웜 바이러스 시초
dfs(link, 1, visited)
# 1번 컴퓨터를 통해 바이러스가 걸리게 되는 컴퓨터의 수를 구해라
# => 1번 컴퓨터는 제외해야하므로 -1
print(len([x for x in visited if x == True]) - 1)
문제 해설
탐색 알고리즘 관련 문제이다. DFS를 이용하여 해결하였는데, 아직 기본기가 많이 부족한게 확연하게 느껴진다.ㅠㅠ
댓글남기기