일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Java
- 라인
- 파이썬
- 라인플러스
- 릿코드
- C++
- spring
- 프로그래밍언어론
- 스타벅스
- dfs
- 알고리즘
- 모두를 위한 딥러닝
- 머신러닝
- 딥러닝
- leetcode
- 백준
- STL
- 백트래킹
- 벤쿠버
- 다이나믹프로그래밍
- binary search
- 시애틀
- BFS
- jvm
- Spring Framework
- DP
- C/C++
- 스프링 프레임워크
- Python
- 프로그래머스
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