DP - 2293번: 동전 1

jisu_log·2025년 8월 18일

알고리즘 문제풀이

목록 보기
88/105


1) dp[x]: 현재까지 고려한 동전으로 x원을 만드는 조합(순서무시)의 개수
2) 초기값: dp[0] = 1 (아무 동전도 안 쓰는 1가지 경우)
3) 루프 순서: 동전 바깥, 금액 오름차순 (조합 + 무한사용)
4) 점화식 : dp[value] += dp[value - c] 는 마지막에 동전 c를 하나 더 쓴 경우(동전 c를 쓰기 위해 value - c한 경우의 수)를 누적함

n, k = map(int, input().split())

coins = []
for i in range(n):
    line = int(input())
    coins.append(line)


# dp[x] : 현재까지 고려한 동전들로 x원을 만드는 조합의 개수
dp = [0] * (k + 1)
dp[0] = 1


# 순서가 상관없는 경우(조합)에는 동전 루프를 바깥 루프로 (순서 상관있는 경우에는 동전 루프를 안쪽 루프로)
for c in coins:
    # 값은 오름차순으로 해야 무한 사용 가능! (내림차순 = 중복 안될때)
    for value in range(c, k + 1):
        dp[value] += dp[value - c]

print(dp[k])

0개의 댓글