백준 온라인 저지, 다이나믹프로그래밍 / 1446번: 지름길 (파이썬 / , 백준 실버문제)
2021. 12. 18. 00:09ㆍ알고리즘/다이나믹프로그래밍
728x90
반응형
문제
매일 아침, 세준이는 학교에 가기 위해서 차를 타고 D킬로미터 길이의 고속도로를 지난다. 이 고속도로는 심각하게 커브가 많아서 정말 운전하기도 힘들다. 어느 날, 세준이는 이 고속도로에 지름길이 존재한다는 것을 알게 되었다. 모든 지름길은 일방통행이고, 고속도로를 역주행할 수는 없다.
세준이가 운전해야 하는 거리의 최솟값을 출력하시오.
입력
첫째 줄에 지름길의 개수 N과 고속도로의 길이 D가 주어진다. N은 12 이하인 양의 정수이고, D는 10,000보다 작거나 같은 자연수이다. 다음 N개의 줄에 지름길의 시작 위치, 도착 위치, 지름길의 길이가 주어진다. 모든 위치와 길이는 10,000보다 작거나 같은 음이 아닌 정수이다. 지름길의 시작 위치는 도착 위치보다 작다.
출력
세준이가 운전해야하는 거리의 최솟값을 출력하시오.
예제 입력 1
5 150 0 50 10 0 50 20 50 100 10 100 151 10 110 140 90
예제 출력 1
70
예제 입력 2
2 100 10 60 40 50 90 20
예제 출력 2
80
예제 입력 3
8 900 0 10 9 20 60 45 80 190 100 50 70 15 160 180 14 140 160 14 420 901 5 450 900 0
예제 출력 3
432
접근 방법
- 0. D의 길이만큼 dp 테이블을 초기화하는데 이때 값은 10000만큼의 값을 가지도록한다.
- 1. 큐에 해당 값을 오름차순으로 삽입한 뒤, 큐의 첫 값 중 시작 위치가 나올 때까지 dp 테이블의 인덱스를 하나씩 현재 dp테이블의 값을 이전 dp 테이블의 값 + 1과 비교해 더 작은 값을 저장한다.
- 2. 이때 현재 위치까지의 거리 + 도착 위치에 해당 지름길의 길이를 더해 이를 dp테이블에 저장한다.
코드
# https://www.acmicpc.net/problem/1446
# 접근 방법
# 0. D의 길이만큼 dp 테이블을 초기화하는데 이때 값은 10000만큼의 값을 가지도록한다.
# 1. 큐에 해당 값을 오름차순으로 삽입한 뒤, 큐의 첫 값 중 시작 위치가 나올 때까지 dp 테이블의 인덱스를 하나씩 현재 dp테이블의 값을 이전 dp 테이블의 값 + 1과 비교해 더 작은 값을 저장한다.
# 2. 이때 현재 위치까지의 거리 + 도착 위치에 해당 지름길의 길이를 더해 이를 dp테이블에 저장한다.
from collections import deque
n, d = map(int, input().split())
temp = [list(map(int, input().split())) for _ in range(n)]
temp.sort(key=lambda x:x[0])
road = deque([])
for x in temp:
road.append(x)
dp = [int(1e4) for _ in range(d+1)]
dp[0] = 0
for i in range(d):
while road and road[0][0] == i:
x = road.popleft()
if x[1] > d:
continue
dp[x[1]] = min(dp[i] + x[2], dp[x[1]])
dp[i+1] = min(dp[i] + 1, dp[i+1])
print(dp[d])
728x90
반응형
'알고리즘 > 다이나믹프로그래밍' 카테고리의 다른 글
백준 온라인 저지, 다이나믹프로그래밍 / 2565번: 전깃줄 (파이썬 / , 백준 골드문제) (0) | 2022.01.02 |
---|---|
백준 온라인 저지, 다이나믹프로그래밍 / 11909번: 배열탈출 (파이썬 / , 백준 골드문제) (0) | 2021.12.26 |
백준 온라인 저지, 다이나믹프로그래밍 / 1149번: RGB거리 (파이썬 / , 백준 실버문제) (0) | 2021.12.16 |
백준 온라인 저지, 다이나믹프로그래밍 / 1005번: ACMcraft (파이썬 / , 백준 골드문제, 삼성 SW 기출문제) (1) | 2021.12.16 |
백준 온라인 저지, 다이나믹프로그래밍 / 9461번: 파도반수열 (파이썬 / , 백준 실버문제) (0) | 2021.12.14 |