(DP) Coin Change
26 Nov 2019 | algorithm programming leetcode주어진 동전이 있을때, 최소한의 동전을 사용하였을 때 거스름돈을 줄 수 있는 개수를 구하는 문제이다.
모든 경우의 수를 탐색하여 완전탐색으로 구할 수 있지만, 타임아웃이 난다.
따라서 DP를 사용하여 Bottom-up으로 접근해야 한다.
class Solution {
public int coinChange(int[] coins, int amount) {
int max = amount + 1;
int[] dp = new int[amount + 1];
dp[0] = 0;
for (int i = 1; i <= amount; i++) {
int minValue = max;
for (int j = 0; j < coins.length; j++) {
if (coins[j] <= i) {
if (minValue > (dp[i - coins[j]] + 1)) {
minValue = (dp[i - coins[j]] + 1);
}
}
}
dp[i] = minValue;
}
return dp[amount] > amount ? -1 : dp[amount];
}
}