일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 프로그래머스
- 모두를 위한 딥러닝
- 라인플러스
- STL
- C/C++
- 프로그래밍언어론
- Python
- 백트래킹
- DP
- 스타벅스
- Java
- binary search
- 알고리즘
- Spring Framework
- 릿코드
- 스프링 프레임워크
- 벤쿠버
- C++
- 시애틀
- 딥러닝
- spring
- jvm
- leetcode
- 파이썬
- 백준
- BFS
- 라인
- 다이나믹프로그래밍
- 머신러닝
- dfs
Archives
- Today
- Total
케이스윔의 개발 블로그
[Leetcode] 746. Min Cost Climbing Stairs 본문
문제 정의
i번째 step 에 대한 cost 가 들어있는 integer array인 cost가 주어지고, cost를 지불하면 1번 또는 2번의 step을 이동할 수 있다. 0 혹은 1의 인덱스에서 시작할 수 있을 때 top을 가기 위한 최소한의 cost를 구하라.
https://leetcode.com/problems/min-cost-climbing-stairs/
풀이
보자마자 dp 로 풀면 되겠다고 생각이 들었다.
간단하게 점화식을 세워볼 수 있다. minCost[i] 는 i번째까지 도달하기 위한 최소한의 cost를 담는다.
- i=0 or 1 -> minCost[i] = cost[i]
- i > 1 -> minCost[i] = min(minCost[i-1], minCost[i-2]) + cost[i];
0 혹은 1부터 시작할 수 있다고 하였으니 첫 스탭은 cost[i] 그대로의 값이 최소한의 cost 이다.
minCost[i]에 i번째까지의 최소한의 cost를 구하기 위해서, i로 올 수 있는 방법은 i-1번째 혹은 i-2번째 인덱스에서 올 수 있다. minCost[i-1]에는 i-1번째까지 오기 위한 최소한의 cost가 담겨있고, minCost[i-2]에는 i-2번째까지 오기 위한 최소한의 cost가 담겨있으니 둘 중 작은 값에 cost[i]를 더해주면 i번째까지 오기 위한 최소한의 cost가 계산된다.
최종적으로 원하는 값은 top 까지 가기 위한 최소한의 cost이므로 cost 배열의 가장 끝인덱스 혹은 끝인덱스-1번째의 cost 중 작은 값이 정답이다.
class Solution {
public int minCostClimbingStairs(int[] cost) {
int size = cost.length;
int[] minCost = new int[size + 1];
minCost[0] = cost[0];
minCost[1] = cost[1];
for (int i=2; i < size; i++) {
minCost[i] = Math.min(minCost[i-1], minCost[i-2]) + cost[i];
}
return Math.min(minCost[size-2], minCost[size-1]);
}
}
'Algorithm' 카테고리의 다른 글
[Leetcode] 102. Binary Tree Level Order Traversal (0) | 2022.07.13 |
---|---|
[Leetcode] 199. Binary Tree Right Side View (0) | 2022.07.12 |
[백준][스택] 2504번 괄호의 값 (0) | 2019.02.08 |
[프로그래머스][DFS] 후보키 (0) | 2019.02.05 |
[프로그래머스][트리] 길 찾기 게임 (0) | 2019.01.31 |
Comments