공부 기록장

[백준 - Python] 1916. 최소비용 구하기 본문

코딩 테스트/백준 문제 풀이

[백준 - Python] 1916. 최소비용 구하기

빛나무 2024. 9. 3. 00:25

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 변수 불필요

- 현재 꺼낸 원소의 거리 값이 테이블에 기록되어 있는 값보다 크다면, 이미 처리가 된 것으로 간주해 무시

- 처리가 안된 것이라면, 해당 노드와 연결된 인접한 노드에 대해서

  현재 노드를 거쳐서 다른 노드로 이동하는 거리가 더 짧은 경우에만 갱신하고 우선순위 큐에 삽입