Leetcode Java Coin Change
업데이트:
문제
코드
class Solution {
public int coinChange(int[] coins, int amount) {
int[] dp = new int[amount + 1];
Arrays.fill(dp, amount + 1);
dp[0] = 0;
for (int idx = 0; idx < amount + 1; idx++) {
for (int coin : coins) {
if (idx >= coin) {
dp[idx] = Math.min(dp[idx], 1 + dp[idx - coin]);
}
}
}
return dp[amount] > amount ? -1 : dp[amount];
}
}
결과
설명
- 주어진 정수 배열 coins의 값들로 amount를 만들 수 있는 최소한의 코인의 개수를 구하는 문제이다.
- 단, amount를 만들 수 없는 경우 -1을 주어진 문제의 결과로 반환한다.
-
dp 배열을 $amount + 1$ 크기로 정의하고, 첫 값에는 0을 그 외에는 amount + 1 값을 넣어준다.
- 0부터 $amount + 1$까지 idx를 증가시키며 dp에 값을 넣어준다.
- coins를 반복하여 idx가 coin의 값보다 큰 경우, dp의 idx번째 값에 dp의 idx번째 값과 dp의 $idx - coin$의 값에 1을 더한 값보다 작은 값을 넣어준다.
- 반복이 완료되어 dp에 값이 다 채워진 경우, dp의 amount번쨰 값이 amount보다 큰 경우 -1을 작은 경우 dp의 amount번째 값을 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기