문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
정수 배열 cost가 주어지고, cost[i]는 계단의 i번째 계단을 오르는 데 드는 비용이다. 비용을 지불하면 한 계단 또는 두 계단을 오를 수 있다.
인덱스 0번 단계부터 시작하거나 인덱스 1번 단계부터 시작할 수 있다.
최상층에 도달하는 데 드는 최소 비용을 반환해라.
#1
Input: cost = [10, 15, 20]
Output: 15
Explanation: 인덱스 1에서 시작한다.
15를 지불하고 두 계단을 오르면 정상이다.
총 비용은 15이다.
#2
Input: cost = [1, 100, 1, 1, 1, 100, 1, 1, 100, 1]
Output: 6
Explanation: 인덱스 0에서 시작한다.
- 1을 지불하고 두 계단을 오르면 인덱스 2에 도착한다.
- 1을 지불하고 두 계단을 오르면 인덱스 4에 도착한다.
- 1을 지불하고 두 계단을 오르면 인덱스 6에 도착한다.
- 1을 지불하고 한 계단을 오르면 인덱스 7에 도착한다.
- 1을 지불하고 두 계단을 오르면 인덱스 9에 도착한다.
- 1을 지불하고 한 계단을 오르면 정상에 도착한다.
총 비용은 6이다.
class Solution {
public int minCostClimbingStairs(int[] cost) {
int n = cost.length;
int[] dp = new int[n];
dp[0] = cost[0];
dp[1] = cost[1];
for(int i = 2; i < n; i++){
dp[i] = cost[i] + Math.min(dp[i - 1], dp[i - 2]);
}
return Math.min(dp[n - 1], dp[n - 2]);
}
}