https://leetcode.com/problems/coin-change/description
Q. 수 만큼 value인 coins 배열과 amount가 주어질때, coins에서 amount를 맞추기 위한 최소한의 동전수를 찾아라.
Solution
DP 계열의 좋은 문제.
동전을 치우면서 amount가 되면 과정의 수를 구하고, 그 중 최소를 찾는다.
많이 보는 패턴이다.
로직대로 코드를 만든다.
더보기
int coin(vector<int>& vCache, vector<int>& coins, int amount)
{
if(amount == 0) return 0;
if(vCache[amount-1] >= 0)
return vCache[amount-1];
int minT = INT_MAX;
for(int k = 0; k < coins.size(); ++k)
{
if(amount - coins[k] < 0)
continue;
int ret = coin(vCache, coins, amount-coins[k]);
if(ret != INT_MAX)
minT = min(minT, 1 + ret);
}
return vCache[amount-1] = minT;
}
int coinChange(vector<int>& coins, int amount)
{
vector<int> vCache;
vCache.resize(amount, -1);
int ret = coin(vCache, coins, amount);
return ret==INT_MAX ? -1 : ret;
}
적절한 결과.
Note 1) 캐시를 선택할 때에도 map/unordered_map 보다는 vector가 빠르다. 생각보다도 더 훨씬...
Note 2) input coins를 먼저 sort 하고 loop에서 조건에 이탈하면 break 를 해 봤다. 결과는 이 경우 별차이 읍음....
'Leetcode > Top 100 Liked' 카테고리의 다른 글
[Graph][Medium] 200. Number of Islands (0) | 2024.03.28 |
---|---|
[Dynamic Programming][Medium] 416. Partition Equal Subset Sum (0) | 2024.03.27 |
[Dynamic Programming][Medium] 300. Longest Increasing Subsequence (0) | 2024.03.26 |
[Dynamic Programming][Medium] 279. Perfect Squares (0) | 2024.03.25 |
[Dynamic Programming][Medium] 152. Maximum Product Subarray (0) | 2024.03.24 |