다음과 같이 여러 단위의 동전들이 주어져 있을때 거스름돈을 가장 적은 수의 동전으로 교환
해주려면 어떻게 주면 되는가? 각 단위의 동전은 무한정 쓸 수 있다.
▣ 입력설명
첫 번째 줄에는 동전의 종류개수 N(1<=N<=12)이 주어진다. 두 번째 줄에는 N개의 동전의 종
류가 주어지고, 그 다음줄에 거슬러 줄 금액 M(1<=M<=500)이 주어진다.
각 동전의 종류는 100원을 넘지 않는다.
▣ 출력설명
첫 번째 줄에 거슬러 줄 동전의 최소개수를 출력한다.
▣ 입력예제 1
3
1 2 5
15
▣ 출력예제 1
3
n=int(input())
a=list(map(int,input().split()))
m=int(input())
a.sort()
dy=[0]*(m+1)
for i in a:
for j in range(i,m+1) :
if i==1: #이렇게 설정하면 안된다
dy[j]=dy[j-i]+1
else:
dy[j]=min(dy[j], dy[j-i]+1)
print(dy[m])
(2)
n=int(input())
a=list(map(int,input().split()))
m=int(input())
a.sort()
dy=[0]*(m+1)
for i in a:
for j in range(i,m+1) :
if i==min(a):
dy[j]=dy[j-i]+1
else:
dy[j]=min(dy[j], dy[j-i]+1)
print(dy[m])
if __name__=="__main__":
n=int(input())
coin=list(map(int, input().split()))
m=int(input())
dy=[1000]*(m+1); #dy를 0이 아니라 크게 설정해놓고
dy[0]=0 # 꼭 첫번째 애는 0으로 초기화 해주고,, 0을 대체할 수 있는 동전은 없으니
for i in range(n):
for j in range(coin[i], m+1):
dy[j]=min(dy[j], dy[j-coin[i]]+1)
print(dy[m])
=>최소를 구할 때는 dy를 [0]이 아닌 큰 값으로 설정하고
dy[0][0]=0으로만 설정해놓으면 됨
n=int(input())
a=list(map(int,input().split()))
m=int(input())
dy=[50]*(m+1)
dy[0]=0
for i in range(n) :
for j in range(a[i],m+1) :
dy[j]=min(dy[j], dy[j-a[i]]+1)
print(dy[m])