[이코테] Greedy - 만들 수 없는 금액
🚨 ‘이것이 취업을 위한 코딩테스트다’ 교재 정리
문제
N개의 동전이 주어질 때 만들 수 없는 양의 정수 금액 중 최솟값을 구하는 프로그램을 작성하시오.
입력 조건
- 첫째 줄에는 동전의 개수를 나타내는 양의 정수 N이 주어진다. ( 1 <= N 1,000)
- 둘째 줄에는 각 동전의 화폐 단위를 나타내는 N개의 자연수가 주어지며 각 자연수는 공백으로 구분된다. 각 화폐 단위는 1,000,000 이하의 자연수이다.
출력 조건
- 첫째 줄에 주어진 동전들로 만들 수 없는 양의 정수 금액 중 최솟값을 출력한다.
입력 예시
입력
1 | 5 |
출력
1 | 8 |
풀이
아이디어
- target 금액은 1부터 시작하고 화폐 단위는 오름차순 정렬을 수행한다.
- 화폐단위를 순차적으로 검사하면서 만약 target보다 단위가 작을 경우 해당 target은 만들 수 있다.
- target을 만들 수 있을 경우, 다음 target은 해당 화폐단위를 더한 값으로 갱신한다.
- target보다 큰 값이 검사 단위로 주어질 경우 해당 target은 만들지 못한다고 판단되어 답으로 출력한다.
핵심은 target 이하의 값은 모두 만들 수 있다고 정의하는 것이었다. 화폐 단위가 작은 동전부터 하나씩 확인하면서 target을 증가시키고 가장 작은 target 값을 찾아가기 때문에 그리디 알고리즘으로 분류된다.
1 | n = int(input()) |
이 블로그의 모든 글은 CC BY-NC-SA 4.0 라이선스를 따르며, 별도로 명시되지 않는 한 모든 권리를 보유합니다. 재배포 시 출처를 명시해 주세요: StudyYeong.