📊알고리즘, 문제풀이/📈문제풀이 (PS)

[알고리즘][Python] 백준 1916 최소비용 구하기 문제 풀이

Written by Donghak Park

문제 출처 : www.acmicpc.net/problem/1916

 

1916번: 최소비용 구하기

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

www.acmicpc.net


문제 해석 : 버스를 타고 이동할 때 출발지, 목적지가 주어진다. 이때 이동할 수 있는 최소 비용을 구하는 문제이다.

 

문제 풀이 : 다익스트라 알고리즘으로 풀이하면 풀 수 있다.

 

가능한 다른 풀이 : 플루이드 워셜 알고리즘을 적용해도 구할 수 있지만 시간 복잡도가 훨씬 높아 시간 초과가 날 수 있다.

 


풀이 코드

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

## 문제의 저작권은 백준 알고리즘 사이트에 있습니다. 혹시 문제가 되는 부분이 있으면 연락 바랍니다.