코딩테스트
[백준/파이썬] 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까지 가는데 최소비용으로 가라는 문제로
읽으면 여러가지로 풀 수 있겠지만 다익스트라가 떠올랐고 다익스트라를 사용해서 풀었습니다.