티스토리 뷰
728x90
반응형
문제
주어진 금액을 만들기 위해 동전 종류에 따라 거스름돈을 주는 방법의 수를 구하는 문제이다.
풀이
- 동적 프로그래밍(DP)을 사용해 풀 수 있다.
- 특정 금액 n을 만들기 위한 방법의 수를 누적해서 계산한다.
- 이때 작은 동전(금액)부터 시작해 큰 동전에 대해 가능한 경우의 수를 차례로 계산한다.
- dp[0]은 항상 아무 동전도 쓰이지 않는 방법 한 가지만 존재함으로 dp[0]=1로 지정한다.
- 현재 금액 x를 만들기 위한 방법의 수는 x - coin을 만들 수 있는 방법의 수에 현재 동전 coin을 추가한 것이다.
- 이를 토대로 점화식을 구성하면 dp[x] = dp[x] + dp[x-coin] 이 된다.
- 마지막 정답을 도출할 때는 숫자가 매우 커질 것을 방지해 1000000007로 나눈 나머지를 반환한다.
Python 코드
def solution(n, money):
dp = [0]*(n+1)
dp[0] = 1
for coin in money:
for x in range(coin, n+1):
dp[x] += dp[x-coin]
dp[x] %= 1000000007
return dp[-1]
문제출처
https://school.programmers.co.kr/learn/courses/30/lessons/12907
728x90
반응형
'Study > Coding Test' 카테고리의 다른 글
[백준 BOJ / Python] 1174번 줄어드는 수 (0) | 2024.11.21 |
---|---|
[백준 BOJ / Python] 1103번 게임 (0) | 2024.11.19 |
[백준 BOJ / Python] 1113번 수영장 만들기 (0) | 2024.11.17 |
[백준 BOJ / Python] 22352번 항체 인식 (0) | 2024.11.16 |
[백준 BOJ / Python] 1743번 음식물 피하기 (1) | 2024.11.12 |
댓글