N개의 동전을 이용하여 만들 수 없는 양의 정수 금액 중 최솟값을 구하는 프로그램을 작성하세요.
n = int(input())
coins = list(map(int, input().split()))
coins.sort()
print(min(coins))
result = 0
if min(coins) != 1:
result = 1
elif min(coins) == 1:
coin = coins[:n-1:]
i = 0
sum = 0
while i<len(coin):
sum += coin[i]
i += 1
p = max(coins) - sum
if p == 0 or p >= 2:
result = sum + 1
elif p == 1:
result = max(coins) + 1
print(result)
1. 가지고 있는 코인들 중 가장 적은 수가 1보다 크다면, 만들 수 없는 최소 금액은 '1'
2. 가지고 있는 코인들 중 가장 적은 수가 1이라면,
가장 큰 수의 코인을 제외하고 나머지 코인들의 수를 더함
그 합이
1) 가장 큰 값과 같을 때 or 가장 큰 값과 2 차이 날 때 : 합보다 1 큰 수가 만들 수 없는 최소 금액
2) 가장 큰 값과 1 차이 날 때 : 가장 큰 값보다 1 큰 수가 만들 수 없는 최소 금액
sum | max | result |
7 | 7 | 8 |
7 | 9 | 8 |
7 | 8 | 9 |
'Algorithm > Programmers' 카테고리의 다른 글
[그리디] 무지의 먹방 라이브 (파이썬) - 아직 미완성... (0) | 2022.07.16 |
---|---|
[그리디] 볼링공 고르기 (파이썬) (0) | 2022.07.16 |
[그리디] 문자열 뒤집기 (파이썬) (0) | 2022.07.16 |
[그리디] 곱하기 혹은 더하기 (파이썬) (0) | 2022.07.16 |
[그리디] 모험가 길드 (파이썬) (0) | 2022.07.16 |