๐ป Coding Problems Solving/Dynamic Programming
[LeetCode] Coin Change
Kim_dev
2023. 3. 29. 00:10
1. ๋ฌธ์ : https://leetcode.com/problems/coin-change/
๋์ ์ ์ต์๋ก ์ฌ์ฉํด ํน์ ์ซ์๋ฅผ ๋ง๋ค๊ธฐ (์ค๋ณต์ฌ์ฉ ๊ฐ๋ฅ)
2. ํ์ด
dp ๋ฌธ์
๋์ ์ต์ํฌ๊ธฐ์ธ 11๋ณด๋ค +1์๋ฅผ max๊ฐ์ผ๋ก dp์ ์ ์ฅํ๊ณ ,
ํด๋น ์ซ์๋ฅผ ๋ง๋ค ์ ์๋ ์ต์์ฌ์ฉํ์๋ฅผ ๋น๊ตํ๋ฉฐ ๊ตฌํ๋ ๋ฐฉ์ (์ด๋ ค์...)
ex)
์ซ์ 2๋ ์ฝ์ธ2 ํ๋ฒ์ ๋ง๋ค ์ ์์ -> ์ด๊ฑธ ์ด๋ป๊ฒ dp๋ก ์๋์ผ๋ก ํ๋? -> dp[i-money์ฆ 0] +1 ๊ณผ dp[i] ๊ฐ ์ค ๋น๊ตํด์ ๋ฃ์ผ๋ฉด๋จ
3. ์ฝ๋
class Solution {
public int coinChange(int[] coins, int amount) {
int[] dp = new int[amount+1];
Arrays.fill(dp,amount+1);
dp[0]=0;
if(amount==0)
return 0;
for(int i=1; i<=amount; i++) {
for(int money : coins) {
if(money <= i){
dp[i]=Math.min(dp[i],dp[i-money]+1);
}
}
}
if(dp[amount]==amount+1){
return -1;
}
return dp[amount];
}
}