코딩 테스트/Baekjoon

G4 2293. 동전 1

  • -
728x90
반응형

문제 보기 :  2293번: 동전 1


문제

  • 정답률 : 47%


작성 코드

n,num = map(int,input().split())
coins = [int(input()) for _ in range(n)]

# num보다 작은 코인만 셀렉
coins = [c for c in coins if c <=num ]

# num원 만드는 경우의 수를 담는 리스트
dd = [0]*(num+1)
dd[0] = 1 #0원 만드는 경우 1개

for coin in coins:
    # [1,0,0,0,...,0]
    for case in range(coin,num+1): 
        dd[case] += dd[case-coin] #dd[1] += dd[0] , dd[2] += dd[1], .. 
        
print(dd[-1])

풀이

동적 프로그래밍으로 각 금액을 만드는 방법의 수를 누적 계산하는 방법을 사용했다. dd[x]를 금액 x를 만들 수 있는 경우의 수로 정의한 셈이다.

먼저 dd라는 리스트가 num+1개의 0을 가지도록 정의하고, dp[0] = 1로 초기화했다. (0원을 만드는 방법은 1가지라는 뜻)

그리고 각 동전에 대해, 해당 동전을 사용해 만들 수 있는 금액을 갱신하는데, dp[amount] += dp[amount - coin]으로 현재 금액에서 동전 금액을 뺀 금액을 만드는 경우의 수를 더했다.

DP는 내가 취약한 알고리즘이라 이 문제는 다시 한번 풀이해볼 문제다.

320x100
728x90

'코딩 테스트 > Baekjoon' 카테고리의 다른 글

S4 1158. 요세푸스 문제  (0) 2024.12.16
S1 2468. 안전 영역  (0) 2024.12.16
S1 11286. 절댓값 힙  (0) 2024.12.15
S4 10866. 덱  (0) 2024.12.15
S4 10816번: 숫자 카드 2  (0) 2024.12.10
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.