/*dp?*/
class Solution {
public int solution(int n, int[] money) {
long[] dp = new long[n+1];
//์ด๊ธฐํ
dp[0] = 1;
for(int i=0;i<money.length;i++){
int currency = money[i];
for(int j = currency;j<=n;j++){
dp[j] += dp[j-currency];
}
}
/*
์ค๋ณต๊น์ง ์ธ๋ฒ๋ฆฌ๋ ์ฝ๋. ์๋ฅผ๋ค์ด money = [1,2,5] ์ผ๋ n=3 ์ด๋ผ๋ฉด
(1,2) (2,1)์ด ์ค๋ณต์ผ๋ก ์ธ์ด์ ธ์ ๋ต์ด 1์ธ๋ฐ 2๊ฐ ๋์ด๋ฒ๋ฆฐ๋ค.
*/
// for(int i=0;i<=n;i++){
// for(int j=0;j<money.length;j++){
// int currency = money[j];
// if(i-currency > 0){
// dp[i] += dp[i-currency];
// }
// }
// }
int answer = (int)(dp[n] % 1000000007);
return answer;
}
}
์ฒ์์ ๋ณผ ๋ dp๋ฅผ ๋ ์ฌ๋ ธ๋ค. ์ฌ๊ธฐ๊น์ง ok์ง๋ง... ์ค๋ณต๊น์ง ์ธ์ด๋ฒ๋ ค์ ์์ ์ ๋ต์ด 9๊ฐ ๋์๋ฒ๋ ธ๋ค.
์ด๋ป๊ฒ ํ ๊น ๊ณ ๋ฏผ์ ํ๋์ค์ ๋ ์ฌ๋ฆฐ ๋ฐฉ๋ฒ์ด ๋คํํ ๋ง์๋ค.
์ฐ์ dp๋ฐฐ์ด์ ๋ง๋ ๋ค. ๊ทธ๋ฆฌ๊ณ
money
๋ฐฐ์ด์ ํตํ(currency
)ํ๋์ฉ ๊ณ ๋ คํ๋ ๊ฒ์ด๋ค.๋ฌธ์ ์ ์์๋ฅผ ํตํด ์์๋ณด๋ฉด
money = [1,2,5]
์ด๊ณn=5
๋๊นmoney
๊ฐ 1์ผ๋dp[j] += dp[j-currency];
์ ํ์์ ๋์ ํ๋ฉด ๋๋ณด๋ค 1์ ์ ์ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ฌ dp[j]์ ๋์ ์ํค๋ ๊ฒ.n=2
์ผ๋๋ฅผ ์ดํด๋ณด๋ฉดdp[j] += dp[j-2]
๋ฅผ ํด์ฃผ๋ฉด๋๋ค.j
์ ๊ฒฝ์ฐ์ ์์j
๋ณด๋ค 2์ ์ ์ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ํด์ฃผ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฉด 1์์ง๋ฆฌ๋ฅผ ์ฌ์ฉํ ๊ฑฐ์ค๋ฆ๋ ๊ฒฝ์ฐ์ ์์ 2์์ง๋ฆฌ๋ฅผ ์ฌ์ฉํ ๊ฑฐ์ค๋ฆ๋ ๊ฒฝ์ฐ๋ฅผ ํฉ์น ๊ฒ ๊น์ง ๊ณ์ฐ๋๋ค.n=5
์ผ๋๋ ๋ง์ฐฌ๊ฐ์ง๋กdp[j] += dp[j-5]
๋ฅผ ๋์ ์ํจ๋ค.