[BAKJOON] #1446. 지름길 (최단 경로)
BAKJOON #1446. 지름길 문제를 파헤쳐보자 :)
최단 경로(Shortest Path) 알고리즘에 대해 알아보자 :)
알고리즘 | 특징 | 시간 복잡도 | 활용 예시 |
다익스트라(Dijkstra) | 한 출발지 → 모든 정점 최단 경로 | O(E log V) (우선순위 큐 사용 시) | 도로 네트워크, 네비게이션 |
벨만-포드(Bellman-Ford) | 음수 가중치 허용, 음수 사이클 검출 가능 | O(VE) | 금융 네트워크 분석 |
플로이드-워셜(Floyd-Warshall) | 모든 정점 쌍 최단 경로 | O(V³) | 도시 간 이동 경로, 네트워크 분석 |
A* (에이 스타) | 휴리스틱 기반 탐색, 빠른 길 찾기 | O(E) | 게임, 로봇 경로 탐색 |
순서 | 절차 |
1 | 출발 노드를 설정하고, 최단 거리 테이블을 무한대로 초기화 |
2 | 출발 노드의 거리를 0으로 설정 |
3 | 방문하지 않은 노드 중 최단 거리가 가장 짧은 노드를 선택 |
4 | 해당 노드를 거쳐 다른 노드로 가는 거리를 계산해, 기존 값과 비교 후 갱신 |
5 | 모든 노드를 방문할 때까지 3~4를 반복 |
import heapq def dijkstra(graph, start): # graph: {노드: [(비용, 연결노드), ...]} distances = {node: float('inf') for node in graph} distances[start] = 0 queue = [(0, start)] # (거리, 노드) while queue: current_dist, current_node = heapq.heappop(queue) if current_dist > distances[current_node]: continue for next_dist, next_node in graph[current_node]: distance = current_dist + next_dist if distance < distances[next_node]: distances[next_node] = distance heapq.heappush(queue, (distance, next_node)) return distances