(DP) Coin Change 2
26 Nov 2019 | algorithm programming leetcode거스름돈을 거슬러주는 모든 경우의 수를 구하는 문제이다. Coin Change 1과 비슷하지만, Coin Change는 거스름 돈을 최소로 할수있는 개수를 구했다면 2는 모든 경우의 수를 구한다.
먼저, Top-down 접근방식으로 이 문제또한 접근할 수 있는데, 이 문제는 유명한 0-1 knapsack 문제 풀이방법과 동일하게 풀 수 있으니 패턴을 기억해두는것이 좋다.
class Solution { public int change(int amount, int[] coins) { int[][] dp = new int[coins.length + 1][amount + 1]; for (int i = 0; i <= amount; i++) { dp[0][i] = 0; } for (int i = 0; i <= coins.length; i++) { dp[i][0] = 1; } for (int i = 1; i <= amount; i++) { for (int j = 1; j <= coins.length; j++) { if (i >= coins[j-1]) { dp[j][i] += dp[j][i - coins[j-1]]; } dp[j][i] += dp[j - 1][i]; } } return dp[coins.length][amount]; } }