코딩 테스트/프로그래머스 level3
부대복귀 BFS 예제 queue
fullfish
2025. 10. 13. 17:50


from collections import deque
def solution(n, roads, sources, destination):
graph = [[] for _ in range(n + 1)]
for a, b in roads:
graph[a].append(b)
graph[b].append(a)
# 거리 초기화
distance = [-1] * (n + 1)
distance[destination] = 0
queue = deque([destination])
# BFS
while queue:
current = queue.popleft()
for next in graph[current]:
if distance[next] == -1:
distance[next] = distance[current] + 1
queue.append(next)
return [distance[s] for s in sources]
도착지에서 한 번만 BFS → 모든 노드까지 최단거리 한 번에 계산 (권장, O(N+M))
시작점마다 BFS → sources 개수만큼 반복 (최악 O(|sources|*(N+M)))
즉, 각 병사들이 도착지로 가는거 계산하는거보다
도착지에서 병사들한테로 퍼지는게 낫다
도착지에서 병사들한테로 퍼지는게 낫다
queue 쓰는 이유는 pop(0)이 O(n)인데 queue는 왼쪽, 오른쪽 둘다 O(1)걸림