
가중치가 있는 그래프에서 하나의 출발점으로부터 모든 노드까지의 최단 거리를 구하는 알고리즘
BFS와 비슷하지만, 가중치가 존재.| 이름 | 역할 |
|---|---|
| 우선순위 큐 (Priority Queue) | 가장 짧은 거리 노드를 빠르게 꺼내기 위해 사용 |
| 거리 배열 (Distance Array) | 출발점에서 각 노드까지의 최단 거리 저장 |
import heapq
dp = [float('inf')] * s
dp[0] = 0
pq = []
heapq.heappush(pq, (0, 0))
dp[pos]: 현재 위치 pos까지의 최소 비용(거리) 저장(거리, 위치)를 우선순위 큐에 저장 → 가장 가까운 위치부터 탐색초기 상태:
| Node(위치) | 거리(dp) | 설명 |
|---|---|---|
| 0 (출발점) | 0 | 출발지 |
| 1 | ∞ | 도달 불가 |
| 2 | ∞ | 도달 불가 |
| 3 | ∞ | 도달 불가 |
| ... | ∞ | ... |
반복 과정:
특정 값 m을 만들기 위해 필요한 최소 연산 횟수 구하기
print(dp[m % s] + m // s)
m % s 위치까지 최소 연산 횟수를 구하고m // s를 더해 최종 연산 횟수 계산flowchart TD
Start((출발점 0))
Start --> A[0에서 이동할 수 있는 모든 위치 계산]
A --> B{우선순위 큐에 삽입}
B --> C[가장 가까운 위치 pop]
C --> D{목표 도달 여부}
D -- No --> A
D -- Yes --> E[최소 거리 출력]
heapq는 (거리, 위치) 순으로 거리 기준 최소 힙으로 동작| 항목 | 내용 |
|---|---|
| 목표 | 출발지 → 모든 지점까지 최단 거리 계산 |
| 특징 | 항상 가장 짧은 거리부터 확정 |
| 자료구조 | 거리 배열(dp) + 우선순위 큐(heapq) |
| 주의 | 가중치는 음수가 없어야 함 |