문제
https://www.acmicpc.net/problem/2606
2606번: 바이러스
첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하인 양의 정수이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍
www.acmicpc.net
문제 요약
n개의 컴퓨터가 m개의 네트워크로 연결되어 있을 때, 1번 컴퓨터가 바이러스에 걸렸을 때, 1번 컴퓨터를 통해 바이러스에 감염되는 컴퓨터 수를 출력한다.
두 컴퓨터가 네트워크로 연결되어 있을 때, 하나의 컴퓨터가 바이러스에 감염되면 다른 컴퓨터도 바이러스에 감염된다.
코드
def dfs(start):
global cnt
check[start] = 1
for i in tree[start]:
if not check[i]:
cnt += 1
dfs(i)
n = int(input())
# 컴퓨터 수
m = int(input())
# 컴퓨터 쌍 수
cnt = 0
# 바이러스에 감염된 컴퓨터 수
tree = [[] for _ in range(n+1)]
# i번 컴퓨터와 네트워크로 연결된 컴퓨터 번호를 저장하는 인접리스트
check = [0] * (n+1)
# 방문 체크 리스트
# 입력 받은 값을 인접리스트에 저장
for i in range(m):
a, b = map(int, input().split())
tree[a].append(b)
tree[b].append(a)
# print(tree)
dfs(1) # 1번 컴퓨터부터 DFS 진행
print(cnt)
코드 설명
1. 입력 값을 인접리스트에 저장한다.
2. dfs함수를 통해 1번 컴퓨터부터 DFS 탐색을 진행한다.
2 - 1. 방문한 컴퓨터 번호를 check 배열에 1로 체크한다. (초기값: 0)
3. 탐색하며 바이러스에 감염된 컴퓨터 수를 출력한다.
'Algorithm Problems > 그래프' 카테고리의 다른 글
[백준/Python] 1697번: 숨바꼭질 (1) | 2023.09.22 |
---|---|
[백준/Python] 11060번: 점프 점프 (1) | 2023.09.21 |
[Python/백준] 5639번: 이진 검색 트리 (2) | 2023.09.09 |
[Python/백준] 1991번: 트리 순회 (2) | 2023.09.08 |
[백준/Python] 2667번: 단지번호붙이기 (2) | 2023.09.01 |