[백준/Python]2293_동전 1
2021. 6. 5. 16:47ㆍ백준 알고리즘
문제
https://www.acmicpc.net/problem/2293
풀이
다이나믹 프로그래밍을 이용해서 풉니다.
다이나믹 프로그래밍은 큰 문제를 작은 문제들로 나누어 푸는 것을 말합니다.
이 문제에서 동전 가치의 합이 k가 되는 조합의 수를 구하는 큰 문제를 동전별로 작은 문제로 나누어 풀 것입니다.
dp 배열의 index는 가치의 합을 나타내고 dp[index]는 가치 합이 index가 되는 동전 조합의 수를 나타냅니다.
dp를 0으로 초기화하고 dp[0]은 동전 한 개의 경우이므로 1을 넣습니다.
그 후, 동전의 종류별로 동전 크기를 간격으로 dp[j] += dp[j - coin]를 수행하면 최종 dp[k]의 값을 구할 수 있습니다.
코드
import sys
n, k = map(int, sys.stdin.readline().rstrip().split())
coins = []
dp = [0] * (k + 1)
dp[0] = 1
for _ in range(n):
coins.append(int(sys.stdin.readline().rstrip()))
for coin in coins:
for j in range(coin, k + 1):
dp[j] += dp[j - coin]
print(dp[k])
'백준 알고리즘' 카테고리의 다른 글
[백준/Python]2630_색종이 만들기 (0) | 2021.06.07 |
---|---|
[백준/Python]1004_어린 왕자 (0) | 2021.06.05 |
[백준/Python]11659_구간 합 구하기 4 (0) | 2021.06.04 |
[백준/Python]11057_오르막 수 (0) | 2021.06.04 |
[백준/Python]2075_N번째 큰 수 (0) | 2021.06.03 |