문제
9084번: 동전
우리나라 화폐단위, 특히 동전에는 1원, 5원, 10원, 50원, 100원, 500원이 있다. 이 동전들로는 정수의 금액을 만들 수 있으며 그 방법도 여러 가지가 있을 수 있다. 예를 들어, 30원을 만들기 위해서는
www.acmicpc.net
알고리즘
정리!
1. 반복문을 통해서 코인을 확인
2. 1원부터 m원까지 돈(j) - 코인(i) => 0보다 크다면 코인으로 만들 수 있는 돈
3. dp[j] += dp[j - i]
4. 위 식의 j - i의 경우 이전에 dp의 저장된 j-i번 째의 수를 가져와 사용하는 것을 의미
5. 즉, j - i를 사용했을 때의 경우의 수에 i를 더한 것
i == 1일 때
1원 : 1
2원 : 11
3원 : 111
4원 : 1111
5원 : 11111
....
j == 2일 때
1원 : 12원 : 11 2 => j - i = 0이기 때문에 dp[0]인 경우를 더한다.
3원 : 111 12 => j - i = 1이기 때문에 dp[1]인 경우를 더한다.
4원 : 1111 112 22 => j - i = 2이기 때문에 dp[2]인 경우를 더한다.
5원 : 11111 1112 122 => j - i = 3기 때문에 dp[3]인 경우를 더한다.
....
코드
import sys
t = int(sys.stdin.readline())
for _ in range(t):
n = int(sys.stdin.readline())
coin = map(int, sys.stdin.readline().split())
m = int(sys.stdin.readline())
dp = [0] * 10001
dp[0] = 1
# 반복문을 통해 코인을 확인
for i in coin:
# 반복문을 통해 코인으로 1원부터 m원까지 만들 수 있는 경우의 수를 확인
for j in range(1, m + 1):
if j - i >= 0:
dp[j] += dp[j - i]
print(dp[m])
github
GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법
내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.
github.com
'CodingTest > Baekjoon' 카테고리의 다른 글
[baekjoon] 백준 6593번(파이썬): 상범 빌딩 (0) | 2022.06.17 |
---|---|
[baekjoon] 백준 5582번(파이썬): 공통 부분 문자열 (0) | 2022.06.16 |
[baekjoon] 백준 13023번(파이썬): ABCDE (0) | 2022.06.14 |
[baekjoon] 백준 1038번(파이썬): 감소하는 수 (0) | 2022.06.13 |
[baekjoon] 백준 11758번(파이썬): CCW (0) | 2022.06.12 |