[문제]
동네 편의점의 주인인 동빈이는 N개의 동전을 가지고 있습니다. 이때 N개의 동전을 이용하여 만들 수 없는 양의 정수 금액 중 최솟값을 구하는 프로그램을 작성하세요.
예를 들어, N=5 이고, 각 동전이 각각 3원, 2원, 1원, 1원, 9원짜리(화폐 단위) 동전이라고 가정합시다. 이때 동빈이가 만들 수 없는 양의 정수 금액 중 최솟값은 8원입니다.
또 다른 예시로, N=3이고, 각 동전이 각각 3원, 5원, 7원 동전이라고 가정합시다. 이때 동빈이가 만들 수 없는 양의 정수 금액 중 최솟값은 1원입니다.
[입력 조건]
- 첫 째줄에는 동전의 개수를 나타내는 양의 정수 N이 주어집니다. (1≤N≤1,000)
- 둘째 줄에는 각 동전의 화폐 단위를 나타내는 N개의 자연수가 주어지며, 각 자연수는 공백으로 구분합니다. 이때, 각 화폐 단위는 1,000,000 이하의 자연수입니다.
[출력 조건]
- 첫째 줄에 주어진 동전들로 만들 수 없는 양의 정수 금액 중 최솟값을 출력합니다.
[입력 예시]
5
3 2 1 1 9
[출력 예시]
8
문제 해결 TIP
일단 주어진 화폐 단위를 오름차순으로 정렬하고 1부터 차례대로 특정한 금액을 만들 수 있는지 확인해야 한다. 만들어야 하는 금액 변수를 target이라고 하자. 동전 종류가 1,1,2,3,9 인 경우 (1+1),2,3,9 일 때 괄호 속 합이 2이므로 다음 숫자 2와 같으므로 만들 수 있다고 본다. (1+1+2),3,9 일 때 역시 괄호 속의 합이 4이므로 다음 숫자 3보다 크므로 만들 수 있다. (1+1+2+3),9 일 때는 괄호 속의 합이 7이므로 다음 숫자 9보다 작다. 이는 9를 제외한 모든 작은 숫자들을 합쳐도 8을 만들 수 없다는 뜻이다. 따라서 target 변수에 오름차순으로 하나씩 수를 더해가며 다음 금액보다 작거나 같은 경우만 금액을 만들 수 있는 것이다.
전체 코드
N = int(input())
money = list(map(int, input().split()))
money.sort()
target = 1
for i in money:
if target<i:
break
target+=i
print(target)
'Python > 그리디' 카테고리의 다른 글
[Algorithm] 삼성 SW 역량테스트 2015 하반기 1번 문제 바이러스 검사, 코드트리 | 파이썬 (그리디) (0) | 2024.08.09 |
---|---|
[Algorithm] 프로그래머스 체육복 | 파이썬 (그리디) (0) | 2024.06.24 |
[Algorithm] 프로그래머스 무지의 먹방 라이브 | 파이썬 (2019 KAKAO BLIND RECRUITMENT) (2) | 2024.06.24 |
[Algorithm] 백준 1931 회의실 배정 | 파이썬 (0) | 2024.06.20 |
[Algorithm] 백준 11047 동전 0 | 파이썬 (0) | 2024.06.20 |
댓글