728x90
정리내용은 [이것이 취업을 위한 코딩 테스트다 with 파이썬] 책을 기반으로 작성하였습니다.
이것이 취업을 위한 코딩 테스트다 with 파이썬 - 교보문고
취업과 이직을 결정하는 알고리즘 인터뷰 완벽 가이드 | 이런 독자에게 권합니다.■ IT 직군의 취업 준비생 / 예비 개발자■ 이직을 준비하는 개발자■ 알고리즘 대회를 준비하는 학생[특징]코딩
www.kyobobook.co.kr
난이도 중 | 풀이시간 30분 | 시간제한 1초 | 메모리제한 128MB
문제
N가지 종류의 화폐가 있다. 이 화폐들의 개수를 최소한으로 이용해서 그 가치의 합이 M원이 되도록 하려고 한다. 이때 각 화폐는 몇개라도 사용할 수 있으며, 사용한 화폐의 구성은 같지만 순서만 다른 것은 같은 경우로 구분한다. 예를 들어 2원, 3원 단위의 화폐가 있을 때는 15원을 만들기 위해 3원을 5개 사용하는 것이 가장 최소한의 화폐 개수이다.
입력 조건
첫째줄에는 N,M이 주어진다.(1<=N<=100, 1<=M<=10000)
이후 N개의 줄에는 각 화폐의 가치가 주어진다. 화폐 가치는 10000보다 작거나 같은 자연수이다.
출력 조건
첫째 줄에 M원을 만들기 위한 최소한의 화폐 개수를 출력한다.
불가능할 때는 -1을 출력한다.
코드 구현
import sys
N,M=map(int,sys.stdin.readline().split())
money_list=[]
for _ in range(N):
money_list.append(int(sys.stdin.readline()))
dp=[10001]*(M+1)
dp[0]=0
for i in range(N):
for j in range(money_list[i],M+1):
if dp[j-money_list[i]]!=10001:
dp[j]=min(dp[j],dp[j-money_list[i]]+1)
if dp[M]==10001:
print(-1)
else:
print(dp[M])
728x90
'Programming > 이것이 취업을 위한 코딩 테스트다 문제풀이' 카테고리의 다른 글
[이코테] 9-5 전보(최단경로, 다익스트라알고리즘) (0) | 2024.01.07 |
---|---|
[이코테] 9-4 미래도시(최단경로, 플로이드 워셜 알고리즘) (0) | 2024.01.04 |
[이코테] 8-4 바닥공사(DP) (0) | 2022.11.12 |
[이코테] 8-3 개미전사(DP) (0) | 2022.11.12 |
[이코테] 8-2 1로 만들기(DP) (2) | 2022.11.12 |