릿코드(LEETCODE)
746. Min Cost Climbing Stairs
cepiloth
2020. 2. 12. 18:14
반응형
https://leetcode.com/problems/min-cost-climbing-stairs/
Min Cost Climbing Stairs - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
1,2 스탭을 움직일 수 있는데 가장 최소의 비용으로 계단을 올라가는 방법을 찾는 문제
DP 응용 문제이고 현재 위치에서 작은 값을 적산하여 출력한다.
D 풀이
현재 위치 = 최소값(현재 위치 - 2, 현재 위치 - 1)
시작점은 0, 1 둘 중에 하나를 선택
class Solution {
public:
int minCostClimbingStairs(vector<int>& cost) {
const int size = cost.size();
for (int i = 2; i < size; i++) {
cost[i] = cost[i] + min(cost[i - 2], cost[i - 1]);
}
return min(cost[size - 2], cost[size - 1]);
}
};
O 풀이
상향식 DP, 재귀
class Solution {
public:
int minCostClimbingStairs(vector<int>& cost) {
int nSize = cost.size();
for (int i = 2; i < nSize; i++)
cost[i] += min(cost[i-2],cost[i-1]);
return min(cost[nSize-2],cost[nSize-1]);
}
};
class Solution {
public:
int minCostClimbingStairs(vector<int>& cost) {
int dp[2] = { cost.at(0), cost.at(1), };
int nSize = cost.size();
for (int i = 2; i < nSize; i++)
{
int nTemp = cost.at(i) + min(dp[0],dp[1]);
dp[0] = dp[1];
dp[1] = nTemp;
}
return min(dp[0],dp[1]);
}
};
class Solution {
private:
vector<int> m_cost;
public:
int Climb(int nPos){
if( nPos >= m_cost.size() )
return 0;
int nSum = m_cost[nPos];
int nA = Climb(nPos+1);
int nB = Climb(nPos+2);
return nSum + ( nA < nB ? nA : nB );
}
int minCostClimbingStairs(vector<int>& cost) {
m_cost = cost;
int nA = Climb(0);
int nB = Climb(1);
return nA < nB ? nA : nB;
}
};
반응형