Problem
동전의 리스트가 주어지면 합이 amount
가 되는 경우의 수를 구하는 문제입니다.
Solution
dp 문제입니다.
dp[i]
는 i 원까지 동전의 경우의 수 입니다.
dp[i] += dp[i - coin]
식은 j
원이 되기 위해서 추가되는 동전의 수라고 생각하며 됩니다.
예를 들어 j
가 10 이고 동전 1, 2, 5 를 갖고 있을 때 경우의 수는
dp[9]
+ 1 원dp[8]
+ 2 원dp[5]
+ 5 원
이렇게 세가지 경우의 수가 됩니다.
dp[9], d[8], dp[5]
또한 각각 해당 인덱스까지의 모든 경우의 수 이기 때문에 전부 더해주면
dp[10]
의 총 경우의 수가 됩니다.
Java Code
class Solution {
public int change(int amount, int[] coins) {
int[] dp = new int[amount+1];
dp[0] = 1;
for (int coin : coins) {
for (int i = coin; i <= amount; i++) {
dp[i] += dp[i - coin];
}
}
return dp[amount];
}
}
'알고리즘 문제 > LeetCode' 카테고리의 다른 글
[LeetCode] Counting Elements (Java) (0) | 2020.04.09 |
---|---|
[LeetCode Easy] Word Pattern (Java) (1) | 2020.04.09 |
[LeetCode Easy] Best Time to Buy and Sell Stock II (Java, Kotlin) (0) | 2020.04.05 |
[LeetCode Easy] Move Zeroes (Java) (0) | 2020.04.04 |
[LeetCode Medium] Battleships in a Board (Java) (0) | 2020.03.30 |