본문 바로가기
문제 해결/BOJ

[백준] Coins

by 자잘 2023. 2. 13.

https://www.acmicpc.net/problem/3067

 

3067번: Coins

우리나라 화폐단위, 특히 동전에는 1원, 5원, 10원, 50원, 100원, 500원이 있다. 이 동전들로는 모든 정수의 금액을 만들 수 있으며 그 방법도 여러 가지가 있을 수 있다. 예를 들어 30원을 만들기 위해

www.acmicpc.net

냅색문제입니다. dp[i][j]를 i번째 동전을 사용하지 않고 j원을 만들 수 있는 경우와 i번째 동전을 사용하여 j원을 만들 수 있는 경우 두가지로 나누어서 생각하면 풀이할 수 있습니다.

import sys

# sys.stdin = open("input.txt", "r")

input = sys.stdin.readline

T = int(input())

for _ in range(T):
    n = int(input())
    coins = [0] + list(map(int, input().split()))
    # 만들고자 하는 액수
    m = int(input())

    dp = [
        [0] * (m + 1)
        for _ in range(n + 1)
    ]
    # 동전을 쓰지 않고 0을 만들 수 있으므로
    dp[0][0] = 1

    for i in range(1, n + 1):
        for j in range(m + 1):
            # 현재 동전을 추가하지 않고 만들 수 있는 경우
            dp[i][j] = dp[i - 1][j]

            # 현재 동전을 추가하여 만들 수 있는 경우
            if j >= coins[i]:
                dp[i][j] += dp[i][j - coins[i]]
    print(dp[n][m])

'문제 해결 > BOJ' 카테고리의 다른 글

[백준] 문자열 생성  (0) 2023.02.14
[백준] 크게 만들기  (0) 2023.02.13
[백준] 짝수 팰린드롬  (0) 2023.02.13
[백준] 폴더 정리(small)  (0) 2023.02.12
[백준] 탑 보기  (0) 2023.02.11