동전 1
n가지 종류의 동전이 있습니다. 각각의 동전이 나타내는 가치는 다르며, 이 동전들을 적당히 사용해서 그 가치의 합이 k원이 되도록 하는 경우의 수를 구하는 프로그램을 작성하세요.
각각의 동전은 몇 개라도 사용할 수 있으며, 사용한 동전의 구성이 같은데 순서만 다른 것은 같은 경우로 취급합니다.
입력 형식
출력 형식
예제 입력 1
3 10
1
2
5
예제 출력 1
10
dp[0] = 1로 초기화
각 동전에 대해
for coin in coins:
for i in range(coin, k + 1):
dp[i] += dp[i - coin]
Ver 1
n, k = map(int, input().split())
coins = [int(input()) for _ in range(n)]
dp = [0] * (k + 1)
dp[0] = 1 # 0원을 만드는 경우는 1가지
for coin in coins:
for i in range(coin, k + 1):
dp[i] += dp[i - coin]
print(dp[k])
Ver 2
def count_coin_cases(n, k, coins):
dp = [0] * (k + 1)
dp[0] = 1 # 0원을 만드는 경우는 1가지 (아무 동전도 사용하지 않음)
for coin in coins:
for j in range(coin, k + 1):
dp[j] += dp[j - coin] # 현재 동전을 사용하는 경우의 수 추가
return dp[k] # k원을 만드는 모든 경우의 수 반환
# 입력 처리
n, k = map(int, input().split())
coins = [int(input()) for _ in range(n)]
print(count_coin_cases(n, k, coins))