[BOJ] Q2293 동전 1

Question

Language: Python

Difficulty: Gold 5

주어진 동전의 종류를 활용해서 k원을 만들고자 할때, k원을 만들 수있는 동전 조합의 개수는?

문제의 예저를 통해서 알아보자

  1 2 3 4 5 6 7 8 9 10
1 이용했을때 1 1+1 1+1+1 1+1+1+1 1+1+1+1+1 1+.. 1+.. 1+.. 1+.. 1+..
2 이용했을때 1 1+1,2 1+1+1,1+2 1+1+1+1,1+1+2,2+2 1+1+1+1+1,1+1+1+2,1+2+2 .. .. .. .. ..
5 이용했을때 1 1+1,2 1+1+1,1+2 1+1+1+1,1+1+2,2+2 1+1+1+1+1,1+1+1+2,1+2+2,5 .. .. .. .. ..

잘 보면 규칙성이 보인다

5원을 만들때의 경우를 보자

1을 이용했을때, 5-1(4)원을 만드는 경우에 1을 더하면 5가 된다. 2을 이용했을때, 5-2(3)원을 만드는 경우에 2을 더하면 5가 된다. 5을 이용했을때, 5-5(0)원을 만드는 경우에 5을 더하면 5가 된다.

각각 k 원에 대해 아래의 DP 연산을 진행하면 된다.

Logic

for money_type in money_types:
  for i in range(k):
    if i-money_type >=0:
      dp[i]+=dp[i-money_type]

Solution

def solution():
    dp=[0] * (k+1)
    dp[0]=1
    for money_type in money_types:
        for i in range(1,k+1):
            prev_step=i-money_type
            if prev_step >=0:
                dp[i]+=(dp[prev_step])

    print(dp[k])    
    
if __name__ =="__main__":
    n,k=map(int,input().split())
    money_types=[]
    for _ in range(n):
        money_types.append(int(input().strip()))
    solution()

댓글남기기