문제 풀이
https://www.acmicpc.net/problem/1446
문제
매일 아침, 세준이는 학교에 가기 위해서 차를 타고 D킬로미터 길이의 고속도로를 지난다. 이 고속도로는 심각하게 커브가 많아서 정말 운전하기도 힘들다. 어느 날, 세준이는 이 고속도로에 지름길이 존재한다는 것을 알게 되었다. 모든 지름길은 일방통행이고, 고속도로를 역주행할 수는 없다.
세준이가 운전해야 하는 거리의 최솟값을 출력하시오.
입력
첫째 줄에 지름길의 개수 N과 고속도로의 길이 D가 주어진다. N은 12 이하인 양의 정수이고, D는 10,000보다 작거나 같은 자연수이다. 다음 N개의 줄에 지름길의 시작 위치, 도착 위치, 지름길의 길이가 주어진다. 모든 위치와 길이는 10,000보다 작거나 같은 음이 아닌 정수이다. 지름길의 시작 위치는 도착 위치보다 작다.
출력
세준이가 운전해야하는 거리의 최솟값을 출력하시오.
예제 입력1 예제 출력1
| 5 150 0 50 10 0 50 20 50 100 10 100 151 10 110 140 90 |
70 |
예제 입력2
| 2 100 10 60 40 50 90 20 |
80 |
풀이
n, d = map(int,input().split())
shortcut = []
for i in range(n) :
shortcut.append(list(map(int, input().split())))
shortcut.sort()
dp=[i for i in range(d + 1)]
k=0
for i in range(d + 1):
dp[i] = min(dp[i - 1] + 1,dp[i])
while k < n:
if i == shortcut[k][0] :
if shortcut[k][1] <= d:
dp[shortcut[k][1]] = min(dp[i]+shortcut[k][2], dp[shortcut[k][1]])
k+=1
else :
break
print(dp[d])
dp[i] = min(dp[i - 1] + 1,dp[i]) : 칸을 이동할 때 마다 dp값을 최소값으로 갱신한다.
입력받은 지름길 개수만큼 반복을 수행하며, 지름길을 이용한 케이스와 지름길을 이용하지 않은 케이스 중 작은 값을 dp에 저장한다.
구한 최솟값을 출력한다.
'알고리즘(algorithm)' 카테고리의 다른 글
| [백준][Python] 1325 효율적인 해킹 (0) | 2025.06.30 |
|---|---|
| [백준][Python] 1003 피보나치 함수 (0) | 2025.05.22 |
| [백준][Python] 2644 촌수계산 (0) | 2025.05.11 |
| [백준][Python] 1764 듣보잡 (0) | 2025.05.03 |
| [백준][Python] 14426 접두사 찾기 (0) | 2025.04.12 |