728x90
<문제>
N가지 종류의 화폐가 있다. 이 화폐들의 개수를 최소한으로 이용해서 그 가치의 합이 M원이 되도록 하려고 한다. 이때 각 화폐는 몇 개라도 사용할 수 있으며, 사용한 화폐의 구성은 같지만 순서만 다른 것은 같은 경우로 구분한다. 예를 들어 2원, 3원 단위의 화폐가 있을 때는 15원을 만들기 위해 3원을 5개 사용하는 것이 가장 최소한의 화폐 개수이다.
<입력 조건>
- 첫째 줄에는 N, M이 주어진다. (1<=N<=100, 1<=M<=10,000)
- 이후 N개의 줄에는 각 화폐의 가치가 주어진다. 화폐 가치는 10,000보다 작거나 같은 자연수이다.
<출력 조건>
- 첫째 줄에 M원을 만들기 위한 최소한의 화폐 개수를 출력한다.
- 불가능할 때는 -1을 출력한다.
<문제 풀이>
1. 보텀업 방식으로 문제 풀기
<코드>
#이취코 답
n,m = map(int,input().split())
array = []
for i in range(n):
array.append(int(input()))
d = [10001] * (m+1)
d[0] = 0
for i in range(n):
for j in range(array[i],m+1):
if d[j-array[i]]!=10001:
d[j] = min(d[j], d[j-array[i]]+1)
if d[m] == 10001:
print(-1)
else:
print(d[m])
<고쳐야 할 점>
- 테스트케이스 이외에 케이스도 고려하기
- 동적계획법 보텀업 방식 기억하기
- 복습 알고리즘
'두두의 알고리즘 > 문제' 카테고리의 다른 글
[플로이드워셜] 난이도2, K 대회 '정확한 순위' (Python) (0) | 2022.03.31 |
---|---|
[동적계획법] 백준 14501번 '퇴사' (Python) (0) | 2022.03.30 |
[이분탐색] 백준 2110번 '공유기 설치' (Python) (0) | 2022.03.29 |
[정렬] 백준 1715번 '카드 정렬하기' (Python) (0) | 2022.03.29 |
[BFS/DFS] 백준 16234번 '인구 이동' (Python) (0) | 2022.03.29 |