Algorithm (PS)

[백준] 22869번: 징검다리 건너기 small (파이썬/Python) - DP

minjiwoo 2022. 12. 10. 14:24
728x90

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

 

22869번: 징검다리 건너기 (small)

$N$개의 돌이 일렬로 나열 되어 있다. $N$개의 돌에는 수 $A_{1} A_{2} ... A_{i} ... A_{N}$로 부여되어 있다. 가장 왼쪽에 있는 돌에서 출발하여 가장 오른쪽에 있는 돌로 건너가려고 한다. 항상 오른쪽으

www.acmicpc.net

징검다리 건너기 (large) 문제와 거의 동일하게 풀었다. 
다만 마지막에 dp[-1] 칸이 값이 k보다 작거나 같은지 확인해주면 된다. 

import sys
input = sys.stdin.readline

n, k = map(int, input().split())
array = list(map(int, input().split()))
INF = int(1e9)
dp = [INF]*n # i 번째까지 올때 드는 최대힘
dp[0] = 0
for i in range(1, n):
    for j in range(0, i):
        cost = max((i-j) * (1+abs(array[i]-array[j])), dp[j]) # i 번째 돌에서 j 번째돌로 이동할 때의 비용
        if cost <= k:
            dp[i] = min(cost, dp[i])

if dp[-1] <= k:
    print("YES")
else:
    print("NO")
728x90