Coin Change
서로 다른 몇 가지 액면가의 동전이 무제한으로 있고, 가능한 한 적은 동전을 사용해 정확한 금액을 지불하고 싶습니다.
맞는 것 중 가장 큰 동전을 집는 것이 좋은 방법처럼 보이지만, 실패할 수 있습니다. 동전이 [1, 3, 4]이고 금액이 6일 때, 가장 큰 동전을 먼저 사용하면 4 + 1 + 1이 되어 동전 세 개가 필요하지만, 3 + 3은 두 개만 필요합니다.
더 안전한 방법은 작은 금액부터 답을 만들어 가는 것입니다. fewest[t]를 합계가 t가 되는 데 필요한 최소 동전 수라고 합시다. 0을 지불하는 데는 동전이 필요하지 않습니다. 그 외의 t에 대해서는 마지막에 사용한 동전의 액면가를 c라고 할 때, 그 동전을 사용하기 전 남은 금액은 t - c이므로 다음과 같습니다.
fewest[t] = 1 + the smallest fewest[t - c] (단, t보다 크지 않은 모든 동전 c에 대해).
[1, 3, 4]의 경우: fewest[3] = 1이고, fewest[6] = 1 + fewest[3] = 2입니다. 도달 가능한 금액으로 이어지는 동전이 없다면 t는 전혀 지불할 수 없습니다.
coinChange라는 함수를 작성하세요. 이 함수는 서로 다른 동전 값의 목록인 coins와 정수 amount를 받아, 합계가 정확히 amount가 되는 데 필요한 최소 동전 개수를 반환합니다. 각 동전 값은 원하는 만큼 사용할 수 있습니다. 금액을 만들 수 없으면 -1을 반환하고, amount가 0이면 0을 반환하세요.
예를 들어, coins = [2, 5, 10]이고 amount = 27이면 4를 반환합니다(10 + 10 + 5 + 2). coins = [4, 6]이고 amount = 7이면 -1을 반환합니다.
제약 조건: 1 <= coins.length <= 12, 1 <= coins[i] <= 10^4, 모든 값은 서로 다르며, 0 <= amount <= 10^4입니다.
함수
- arg1integer-array
- arg2integer
- 반환값integer
예제
- 입력
- arg1 = [2, 5, 10]arg2 = 27
- 출력
- 4
- 입력
- arg1 = [4, 6]arg2 = 7
- 출력
- -1
- 입력
- arg1 = [3, 7]arg2 = 0
- 출력
- 0
제출 시 숨은 테스트 +12개
힌트
하나씩 열어 보세요. 열 때마다 조금 더 알려 줍니다.
들어맞는 가장 큰 동전을 항상 선택한다고 해서 항상 동전 개수가 가장 적어지는 것은 아닙니다. 동전
[1, 3, 4]와 금액6으로 시도해 보세요.t보다 작은 모든 금액을 만드는 데 필요한 최소 동전 개수를 이미 알고 있다고 가정해 보세요. 동전 하나를 더 사용하면 어떤 더 작은 금액에서t에 도달할 수 있을까요?테이블
fewest[0..amount]을0부터 시작해 채웁니다.fewest[0] = 0이며, 각fewest[t]는 동전c <= t에 대해 가장 좋은fewest[t - c]보다 1 큰 값입니다. 도달할 수 없는 금액은 실제 답보다 큰 값(예:amount + 1)으로 표시하고, 마지막에-1로 바꿉니다.
이 문제의 전체 풀이가 곧 추가됩니다.
비슷한 문제
같은 아이디어를 쓰는 문제입니다. 두세 개를 풀면 패턴이 몸에 익습니다.
Python
def coinChange(coins, amount):
# 여기에 코드를 작성하세요케이스 1
케이스 2
케이스 3
입력
arg1 = [2, 5, 10] arg2 = 27
기대값
4