https://www.acmicpc.net/problem/2293
import sys
input = sys.stdin.readline
n, k = map(int, input().split())
coins = [int(input().strip()) for _ in range(n)]
dp = [1] + [0]*k # dp[0] = 1
for coin in coins:
for i in range(1, k+1):
if i - coin >= 0:
dp[i] += dp[i-coin]
"""
print(coin, "원짜리 동전까지를 사용했을 때")
print(dp)
print("-"*10)
"""
print(dp[k])
k원이 되는 경우의 수 -> i원이 되는 경우의 수 (1 <= i <= k)로 나누어 접근
i원이 되는 경우의 수를 구할 때, j번째 (1 <= j <= n)동전까지 사용했을 때 i원을 만들 수 있는 경우의 수로 또다시 나누어 접근
1차원 리스트 dp를 만들고, 동전 리스트 coins를 순회하며 업데이트 해준다.
dp[i] = dp[i] + dp[ i - coins[j] ] (i - coin[j] >= 0일 때)
RHS의 dp[i] + dp[ i-coins[j] ]에 대해서 설명하자면,
이때, dp[0] = 1로 초기화해줘야 함에 유의
-> 동전이 하나만 쓰일 경우에 이용하는 값
🔽코드의 주석 부분에서 출력되는 값🔽