동전 종류가 담긴 배열 coins와 목표 금액 amount가 주어져요. 목표 금액을 만드는 데 필요한 동전의 최소 개수를 반환해요.
같은 동전을 여러 번 사용할 수 있어요. 어떤 조합으로도 금액을 만들 수 없다면 -1을 반환해요.
탐욕적으로 큰 동전부터 쓰는 방법은 틀려요. 예를 들어 coins = [1, 3, 4], amount = 6이면 4+1+1(3개)이 아니라 3+3(2개)이 정답이에요.
예시
예시 1
예시 2
예시 3
제한 사항
- 1 ≤ coins.length ≤ 12
- 1 ≤ coins[i] ≤ 2^31 - 1
- 0 ≤ amount ≤ 10,000
dp[i] = i원을 만드는 최소 동전 개수로 둬요. dp[0] = 0이고, 각 금액 i마다 모든 동전 c에 대해 dp[i] = min(dp[i], dp[i - c] + 1) 이에요.
javascriptCopy codefunction coinChange(coins, amount) {const INF = Infinity;const dp = new Array(amount + 1).fill(INF);dp[0] = 0;for (let i = 1; i <= amount; i++) {for (const c of coins) {if (c <= i && dp[i - c] + 1 < dp[i]) {dp[i] = dp[i - c] + 1;}}}return dp[amount] === INF ? -1 : dp[amount];}
예시 테스트만 실행 (Cmd/Ctrl+Enter)
숨김 테스트까지 채점 (Cmd/Ctrl+Shift+Enter)
에디터를 불러오고 있어요…
코드를 작성하고Ctrl↵를 눌러 예시 테스트를 확인해 보세요.