n가지 종류의 동전이 있다. 각각의 동전이 나타내는 가치는 다르다. 이 동전을 적당히 사용해서, 그 가치의 합이 k원이 되도록 하고 싶다. 그 경우의 수를 구하시오. 각각의 동전은 몇 개라도 사용할 수 있다.
사용한 동전의 구성이 같은데, 순서만 다른 것은 같은 경우이다.
Input | Output |
---|---|
3 10 1 2 5 | 10 |
# 코드
# 입력
n, k = map(int, input().split(' '))
num_list = [int(input()) for _ in range(n)]
# dp 초기화
dp = [0] * (k + 1)
dp[0] = 1
# num_list 기준 반복
for num in num_list:
# 1..k까지 가능한 경우 확인
for i in range(1, k+1):
if i >= num:
dp[i] += dp[i - num]
# dp[k] 반환
print(dp[k])
# 모든 경우를 반복하므로 동일하지만 숫자의 순서가 다른 경우도 더해진다.
for i in range(1, k+1):
for num in num_list:
if i >= num:
dp[i] += dp[i - num]