백준 2606번 바이러스

바이러스 문제 바로 가기

문제:
신종 바이러스인 웜 바이러스는 네트워크를 통해 전파된다. 한 컴퓨터가 감염되면, 네트워크 상에서 연결된 모든 컴퓨터가 감염된다. 1번 컴퓨터가 바이러스에 감염된 상황에서, 감염될 수 있는 컴퓨터의 수를 출력하는 프로그램을 작성하시오.

입력:
- 첫째 줄: 컴퓨터 수 (100 이하 자연수) - 둘째 줄: 연결된 쌍의 수 - 다음 줄: 연결된 컴퓨터 번호 쌍 (한 줄당 하나씩)

출력:
- 1번 컴퓨터로부터 바이러스에 감염되는 컴퓨터 수 (1번 제외)


풀이 코드


computer = int(input())
pair = int(input())

graph = [[] for _ in range(computer + 1)]
visited = [0] * (computer + 1)

for _ in range(pair):
    a, b = map(int, input().split())
    graph[a].append(b)
    graph[b].append(a)

def dfs(node):
    visited[node] = 1
    for neighbor in graph[node]:
        if visited[neighbor] == 0:
            dfs(neighbor)

dfs(1)
print(sum(visited) - 1)


해결 전략

  • DFS 방식으로 그래프 탐색
  • 방문한 노드는 visited 리스트에 1로 표시
  • 연결된 컴퓨터가 아직 방문되지 않았다면 재귀 호출
  • 마지막에 visited 리스트의 총합에서 1번 컴퓨터 제외