코딩테스트

[백준/파이썬] 1916 최소비용

Sun0727 2022. 12. 21. 22:38

#문제링크

https://www.acmicpc.net/problem/1916

 

1916번: 최소비용 구하기

첫째 줄에 도시의 개수 N(1 ≤ N ≤ 1,000)이 주어지고 둘째 줄에는 버스의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 그리고 셋째 줄부터 M+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그

www.acmicpc.net

#나의풀이

import sys
import heapq

def dijkstra(start):
    dp[start] = 0
    heap = []
    heapq.heappush(heap, [0, start])

    while heap:
        w, cur  = heapq.heappop(heap)

        if dp[cur] < w:
            continue

        for dest, weight in graph[cur]:
            cost = dp[cur] + weight
            if dp[dest] > cost:
                dp[dest] = cost
                heapq.heappush(heap, [cost, dest])


if __name__=="__main__":
    Node = int(sys.stdin.readline())
    graph = [[] for _ in range(Node+1)]
    dp = [2147000000] * (Node+1)
    M = int(sys.stdin.readline())

    for _ in range(M):
        i, j, value = map(int, sys.stdin.readline().split())
        graph[i].append([j, value])

    start, end = map(int, sys.stdin.readline().split())

    dijkstra(start)
    print(dp[end])

#해설

간단하게 설명하자면 start에서 시작해서 end까지 가는데 최소비용으로 가라는 문제로

읽으면 여러가지로 풀 수 있겠지만 다익스트라가 떠올랐고 다익스트라를 사용해서 풀었습니다.