문제 출처 : www.acmicpc.net/problem/1916
문제 해석 : 버스를 타고 이동할 때 출발지, 목적지가 주어진다. 이때 이동할 수 있는 최소 비용을 구하는 문제이다.
문제 풀이 : 다익스트라 알고리즘으로 풀이하면 풀 수 있다.
가능한 다른 풀이 : 플루이드 워셜 알고리즘을 적용해도 구할 수 있지만 시간 복잡도가 훨씬 높아 시간 초과가 날 수 있다.
풀이 코드
import sys, heapq
input = sys.stdin.readline
INF = sys.maxsize
def dijstra(start):
distance = [INF] * (N+1)
Q = []
heapq.heappush(Q, [0, start])
distance[start] = 0
while Q:
now_cost, now_vertex = heapq.heappop(Q)
for next_cost, next_vertex in graph[now_vertex]:
if distance[next_vertex] > next_cost + now_cost:
next_cost += now_cost
heapq.heappush(Q, [next_cost, next_vertex])
distance[next_vertex] = next_cost
return distance
N = int(input())
M = int(input())
graph = [[] for _ in range(N+1)]
for _ in range(M):
start, end, cost = map(int, input().split())
graph[start].append([cost, end])
A, B = map(int, input().split())
answer = dijstra(A)
print(answer[B])
author : donghak park
contact : donghark03@naver.com
## 문제의 저작권은 백준 알고리즘 사이트에 있습니다. 혹시 문제가 되는 부분이 있으면 연락 바랍니다.
'📊알고리즘, 문제풀이 > 📈문제풀이 (PS)' 카테고리의 다른 글
[알고리즘][Python] 백준 1967 트리의 지름 문제 풀이 (0) | 2021.01.20 |
---|---|
[알고리즘][Python] 백준 1918 후위 표기식 문제 풀이 (0) | 2021.01.20 |
[알고리즘][Python] 백준 1786 찾기 문제 풀이 (0) | 2021.01.19 |
[알고리즘][Python] 백준 1865 웜홀 문제 풀이 (0) | 2021.01.19 |
[알고리즘][Python] 백준 1753 최단경로 문제 풀이 (0) | 2021.01.19 |