공부 기록장
[백준 - Python] 1916. 최소비용 구하기 본문
https://www.acmicpc.net/problem/1916
코드
import sys
import heapq
input = sys.stdin.readline
INF = int(1e9)
n = int(input())
m = int(input())
graph = [[] for _ in range(n+1)]
distance = [INF] * (n+1)
for _ in range(m):
a, b, c = map(int, input().split())
graph[a].append((b, c))
start, end = map(int, input().split())
def dijkstra(start):
q = []
heapq.heappush(q, (0, start))
distance[start] = 0
while q:
dist, now = heapq.heappop(q)
if distance[now] < dist:
continue
for i in graph[now]:
cost = dist + i[1]
if cost < distance[i[0]]:
distance[i[0]] = cost
heapq.heappush(q, (cost, i[0]))
dijkstra(start)
print(distance[end])
접근 방식
- 특정 노드에서 특정 노드로 가는 최단 거리를 구하는 문제
- 다익스트라를 사용해야 함을 쉽게 파악 가능
- 다익스트라 알고리즘을 알고 있어야 풀 수 있는 문제
배운 점
- 다익스트라 알고리즘을 복습할 수 있었다
- 개선된 버전의 다익스트 알고리즘은 방문 여부를 처리하는 별도의 visited 변수 불필요
- 현재 꺼낸 원소의 거리 값이 테이블에 기록되어 있는 값보다 크다면, 이미 처리가 된 것으로 간주해 무시
- 처리가 안된 것이라면, 해당 노드와 연결된 인접한 노드에 대해서
현재 노드를 거쳐서 다른 노드로 이동하는 거리가 더 짧은 경우에만 갱신하고 우선순위 큐에 삽입
'코딩 테스트 > 백준 문제 풀이' 카테고리의 다른 글
[백준 - Python] 11779. 최소비용 구하기2 (2) | 2024.09.06 |
---|---|
[백준 - Python] 1238. 파티 (0) | 2024.09.03 |
[백준 - Python] 11279. 최대 힙 (0) | 2024.08.30 |
[백준 - Python] 2075. N번째 큰 수 (0) | 2024.08.30 |
[백준 - Python] 17609. 회문 (0) | 2024.08.09 |