Algorithm

[백준] Python 2606 바이러스 BFS/DFS로 풀이.

jyp-on 2023. 2. 4. 07:15

먼저 DFS 풀이. 

방문한 노드면 재귀 종료.

방문 안한 노드면 방문처리 해주고 연결된 노드들 확인.

from collections import defaultdict

n = int(input())
connect_len = int(input())

dic = defaultdict(list)
for i in range(connect_len):
    a, b = map(int, input().split())
    dic[a].append(b)
    dic[b].append(a) # 양방향

# dfs 접근

visited = [False for _ in range(n+1)] # 1번부터 시작하기 위해 n+1
def dfs(v, visited):
    global cnt
    if visited[v]:
        return

    visited[v] = True
    for k in dic[v]:
        if not visited[k]:
            dfs(k, visited)


dfs(1, visited)
print(visited.count(True)-1)

BFS풀이. queue를 활용하여 근처에있는 노드들 순차적으로 확인.

from collections import defaultdict
from collections import deque

n = int(input())
connect_len = int(input())

dic = defaultdict(list)
for i in range(connect_len):
    a, b = map(int, input().split())
    dic[a].append(b)
    dic[b].append(a) # 양방향

# bfs 접근

visited = [False for _ in range(n+1)] # 1번부터 시작하기 위해 n+1

q = deque()
q.append(1)

while q:
    v = q.popleft()

    visited[v] = True

    for k in dic[v]:
        if not visited[k]:
            q.append(k)

print(visited.count(True)-1)