- 앞의 가방 문제와 마찬가지로 냅색 알고리즘을 사용하여 푼다
- 다른 점은 minimum 값을 구한다는 것이다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
if __name__=='__main__':
n = int(input())
coins = list(map(int, input().split()))
money = int(input())
dyn = [1000]*(money+1) # 동전이 1 <= M <= 500 이므로 넉넉하게 큰 값을 1000으로 주었다
dyn[0] = 0
for coin in coins:
for i in range(coin, money+1):
dyn[i] = min(dyn[i-coin]+1, dyn[i])
print(dyn[money])
|
cs |
728x90
'Data Structures & Algorithms' 카테고리의 다른 글
[Algorithms] 동적 계획법(Dynamic Programming)-위상정렬(그래프 정렬) (0) | 2022.06.09 |
---|---|
[Algorithms] 동적 계획법(Dynamic Programming)-최대 점수 구하기(냅색 알고리즘) (0) | 2022.06.09 |
[Algorithms] 동적 계획법(Dynamic Programming)-가방문제(냅색 알고리즘) (0) | 2022.06.08 |
[Algorithms] 동적 계획법(Dynamic Programming)-알리바바와 40인의 도둑(Bottom-Up & Top-Down) (0) | 2022.06.07 |
[Algorithms] 동적 계획법(Dynamic Programming)-가장 높은 탑 쌓기 (LIS 응용) (0) | 2022.06.07 |