백준 2606번 바이러스
바이러스 문제 바로 가기
문제:
신종 바이러스인 웜 바이러스는 네트워크를 통해 전파된다. 한 컴퓨터가 감염되면, 네트워크 상에서 연결된 모든 컴퓨터가 감염된다. 1번 컴퓨터가 바이러스에 감염된 상황에서, 감염될 수 있는 컴퓨터의 수를 출력하는 프로그램을 작성하시오.
입력:
- 첫째 줄: 컴퓨터 수 (100 이하 자연수) - 둘째 줄: 연결된 쌍의 수 - 다음 줄: 연결된 컴퓨터 번호 쌍 (한 줄당 하나씩)
출력:
- 1번 컴퓨터로부터 바이러스에 감염되는 컴퓨터 수 (1번 제외)
신종 바이러스인 웜 바이러스는 네트워크를 통해 전파된다. 한 컴퓨터가 감염되면, 네트워크 상에서 연결된 모든 컴퓨터가 감염된다. 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번 컴퓨터 제외