알고리즘/백준[baekjoon]
[baekjoon] 백준 1916번 : 최소비용 구하기(by python 파이썬) 다익스트라 최단거리
코딩하는이씨
2022. 8. 23. 11:41
728x90
반응형
https://www.acmicpc.net/problem/1916
1916번: 최소비용 구하기
첫째 줄에 도시의 개수 N(1 ≤ N ≤ 1,000)이 주어지고 둘째 줄에는 버스의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 그리고 셋째 줄부터 M+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그
www.acmicpc.net
정답 code
# 최소비용 구하기
import heapq
import sys
input = sys.stdin.readline
INT = int(1e9)
def dijkstra(start):
q = []
heapq.heappush(q,(0,start))
visit = [INT] * (n+1)
visit[start] = 0
while q:
dist, node = heapq.heappop(q)
if visit[node] >= dist:
for node_index, node_time in bus[node]:
time = node_time + dist
if visit[node_index] > time:
visit[node_index] = time
heapq.heappush(q,(time,node_index))
return visit
n = int(input())
m = int(input())
bus = [[] for _ in range(n+1)]
for _ in range(m):
s,e,t = map(int,input().split())
bus[s].append((e,t))
start,target = map(int,input().split())
result = dijkstra(start)
print(result[target])
solution
단순한 최단거리 문제다. 다익스트라를 이용하여 간단히 해결 할 수 있다.
골드 문제지만 다익스트라를 익혔다면 실버 정도로 생각되는 문제다.
다익스트라 알고리즘:
1. 출발노드 설정
2. 출발노드 기준으로 각 노드의 최소비용 저장
3. 방문하지 않은 노드중 비용이 가장 적은 노드 선택
4. 해당 노드에서 특정 노드로 가는 최단거리 확인후 갱신
5. 3~4 반복
728x90
반응형