N개의 동전이 주어졌을 때 만들 수 없는 양의 정수 금액 중 최솟값을 구하는 프로그램을 작성하세요.
📌 입력 조건
- 첫째 줄에는 동전의 개수를 나타내는 양의 정수 N이 주어집니다. (1 <= N <= 1,000)
- 둘째 줄에는 각 동전의 화폐 단위를 나타내는 N개의 자연수가 주어지며, 각 자연수는 공백으로 구분합니다. 이때, 각 화폐 단위는 1,000,000 이하의 자연수입니다.
📌 출력 조건
- 첫째 줄에 주어진 동전으로 만들 수 없는 양의 정수 금액 중 최솟값을 출력합니다.
📌입력 예시
5
3 2 1 1 9
📌출력 예시
8
📌풀이
# 1부터 target - 1까지 금액을 만들 수 있다고 가정, 화폐를 오름차순으로 정렬한다.
# 1을 만들 수 있는지 target = 1 부터 체크한다.
# 매번 target인 금액(현재 확인하는 동전의 단위가 target 이하인지)을 만들 수 있는지 확인한다.
# 현재 확인하는 동전의 단위가 target 미만이라면 target 금액을 만들 수 있고, target에 현재 동전을 더한다.
# target 보다 꺼낸 동전의 금액이 크면 target을 만들 수 없음
n = int(input())
data = list(map(int, input().split()))
data.sort()
target = 1
for x in data:
if target < x:
break
target += x
print(target)
사실 무슨 소리인지 몰라서 처음에 못 풀었다. 풀이를 참고했는데 일반적인 생각으로는 풀 수 없었다 하하..
그리디 알고리즘이 익숙하지 않아서 그런가 보다 하고 여러 번 반복 숙달시키면 되겠지 뭐
중요한 것은 1부터 target - 1까지의 금액을 만들 수 있다고 가정하는 것!
동전을 꺼낸 뒤 target 보다 작거나 같으면 target 이하의 금액을 만들 수 있다.
동전의 단위가 target보다 크다면 target 금액을 만들 수 없다.
'Programming > Python' 카테고리의 다른 글
[Python] 문자열 포매팅 - format() 함수 (0) | 2021.09.27 |
---|---|
[이코테] 그리디 알고리즘 - 문자열 뒤집기 (0) | 2021.07.06 |
[이코테] 그리디 알고리즘 - 곱하기 혹은 더하기 (0) | 2021.07.06 |
[이코테] 그리디 알고리즘 - 모험가 길드 (0) | 2021.07.06 |
[이코테] 그리디 알고리즘 - 볼링공 고르기 (0) | 2021.06.12 |