문제풀이/DP

[파이썬] [DP] 백준 1446 지름길

승무_ 2023. 2. 28. 12:59

문제

https://www.acmicpc.net/problem/1446

 

1446번: 지름길

첫째 줄에 지름길의 개수 N과 고속도로의 길이 D가 주어진다. N은 12 이하인 양의 정수이고, D는 10,000보다 작거나 같은 자연수이다. 다음 N개의 줄에 지름길의 시작 위치, 도착 위치, 지름길의 길이

www.acmicpc.net

코드

import sys
input=sys.stdin.readline

n,d=map(int, input().split())

graph=[[] for _ in range(d+1)]
for _ in range(n):
    a,b,c=map(int, input().split())
    if b<=d:
        graph[a].append([b,c])
dp=[]
for i in range(d+1):
    dp.append(i)

for i in range(d+1):
    # 지름길(dp[i])과 고속도로(dp[i-1]+1) 비교
    dp[i] = min(dp[i], dp[i - 1] + 1)
    if graph[i]:
        for des,dis in graph[i]:
            #지름길이 더 짧을 경우 갱신
            dp[des]=min(dp[des], dis+dp[i])

print(dp[d])

시간 복잡도

O(고속도로 길이)