Algorithm/BOJ

[ BOJ ] 9084 / 동전

jennyf 2022. 8. 3. 13:54
t = int(input())

for _ in range(t):

  coin_num = int(input()) # 동전의 가지 수
  arr = list(map(int, input().split()))
  arr.insert(0, 0)
  result = int(input())

  dp = [[0] * (result + 1) for i in range(coin_num + 1)] # 2차원 배열 생성

  for i in range(coin_num + 1):
    dp[i][0] = 1 # result = 0을 만들 수 있는 가지수는 무조건 1

  for j in range(1, coin_num + 1): # 화폐의 종류의 개수
    for i in range(1, result + 1): # 찾고자 하는 돈

      # j 행을 j-1행으로 update
      dp[j][i] = dp[j-1][i]

      # 4원짜리 동전으로는 4원부터 표현할 수 있습니다.
      # 이것을 체크하는 것
      if i - arr[j] >= 0:

        # j 값으로 표현할 수 있는 경우의 수를 더합니다.
        dp[j][i] += dp[j][i - arr[j]]

  print(dp[coin_num][result])