DonHurry

[Python] λ°±μ€€ 9084번 - 동전 λ³Έλ¬Έ

Problem Solving

[Python] λ°±μ€€ 9084번 - 동전

_도녁 2024. 1. 19. 13:42

πŸ“– λ¬Έμ œ

 

9084번: 동전

μš°λ¦¬λ‚˜λΌ ν™”νλ‹¨μœ„, 특히 λ™μ „μ—λŠ” 1원, 5원, 10원, 50원, 100원, 500원이 μžˆλ‹€. 이 λ™μ „λ“€λ‘œλŠ” μ •μˆ˜μ˜ κΈˆμ•‘μ„ λ§Œλ“€ 수 있으며 κ·Έ 방법도 μ—¬λŸ¬ κ°€μ§€κ°€ μžˆμ„ 수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄, 30원을 λ§Œλ“€κΈ° μœ„ν•΄μ„œλŠ”

www.acmicpc.net

 

πŸ”Ž ν’€μ΄

λ°°λ‚­ 문제 ν’€μ΄λ²•μœΌλ‘œ ν’€ 수 μžˆλŠ” DP λ¬Έμ œμž…λ‹ˆλ‹€. μ‹œκ°„ λ³΅μž‘λ„λŠ” O(M + N)으둜 2차원 ν…Œμ΄λΈ”μ„ λ§Œλ“€μ–΄ ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 각 λ™μ „μ˜ μ’…λ₯˜ Nκ°€μ§€ 만큼 M + 1개의 μ›μ†Œλ₯Ό κ°€μ§€κ³  μžˆλŠ” 배열을 λ§Œλ“€κ³ , 동전 μ’…λ₯˜ λ³„λ‘œ ν…Œμ΄λΈ”μ„ μ±„μ›Œλ‚˜κ°€λ©΄ λ©λ‹ˆλ‹€.

 

μ•„λž˜ μ½”λ“œμ—μ„œλŠ” 1차원 λ°°μ—΄λ§ŒμœΌλ‘œλ„ ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 핡심은 ν˜„μž¬ κΈˆμ•‘(M)μ—μ„œ λ™μ „μ˜ κΈˆμ•‘μ„ λΉΌ μ€€ 값을 인덱슀둜 ν•˜μ—¬, ν•΄λ‹Ή 인덱슀의 μ›μ†Œλ₯Ό λ”ν•΄μ£ΌλŠ” κ²ƒμž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ ν˜„μž¬ κΈˆμ•‘μ΄ 10원이고, 동전 μ’…λ₯˜κ°€ 5원이라면 table[10-5]의 값을 ν˜„μž¬ table[10]의 값에 λ”ν•΄μ€λ‹ˆλ‹€.

 

πŸ’» μ½”λ“œ

for _ in range(int(input())):
    n = int(input())
    coins = list(map(int, input().split()))
    m = int(input())

    table = [0] * (m + 1)
    table[0] = 1

    for i in range(n):
        k = coins[i]
        for j in range(k, m+1):
            table[j] += table[j-k]

    print(table[-1])