https://www.acmicpc.net/problem/1916
그래프에서 최소 비용을 구하는 문제로 다익스트라 알고리즘이 사용되는 대표 문제입니다.
* 다익스트라 알고리즘: 한 노드에서 다른 모든 노드로의 최소 비용(=최단 거리)을 계산할 때 사용되는 방법
접근 방식
1. 입력된 모든 노드와 간선 정보를 저장
2. 다익스트라 알고리즘을 이용해서 출발 도시에서 모든 도시로의 최소 비용을 계산
3. 2단계에서 계산된 출발 도시에서 도착 도시로의 비용을 출력
전체 코드
제출 언어: Python3
시간: 424ms
'''
제출 언어: Python3
시간: 424ms
'''
import sys
import heapq
def solution(c1):
global graph, distance
distance[c1] = 0
q = [ (0, c1) ]
while q:
cd, cc = heapq.heappop(q)
if distance[cc] < cd:
continue
for nc, w in graph[cc]:
nd = cd + w
if distance[nc] > nd:
distance[nc] = nd
heapq.heappush(q, (nd, nc))
if __name__ == "__main__":
N = int(sys.stdin.readline().strip())
M = int(sys.stdin.readline().strip())
graph = [ [] for _ in range(N+1) ]
distance = [ float('inf') ] * (N+1)
for _ in range(M):
s, e, w = map(int, sys.stdin.readline().strip().split())
graph[s].append((e, w))
c1, c2 = map(int, sys.stdin.readline().strip().split())
solution(c1)
answer = distance[c2]
print(answer)
'PS > Python' 카테고리의 다른 글
[백준] 9012 - 괄호 (파이썬, Python) (2) | 2021.09.30 |
---|---|
[백준] 9205 - 맥주 마시면서 걸어가기 (파이썬, Python) (0) | 2021.09.29 |
[백준] 21610 - 마법사 상어와 비바라기 (파이썬, Python) (0) | 2021.09.22 |
[Programmers] 합승 택시 요금 (파이썬, Python) (0) | 2021.09.21 |
[백준] 1920 - 수 찾기 (파이썬, Python) (0) | 2021.09.19 |