코드
from sys import stdin
input = stdin.readline
N = int(input())
budgets = list(map(int, input().split()))
total_budget = int(input())
if sum(budgets) <= total_budget:
print(max(budgets))
else:
start, end = 0, total_budget
while start <= end:
mid = (start + end) // 2
total = sum(map(lambda x: x if x <= mid else mid, budgets))
if total <= total_budget:
start = mid + 1
else:
end = mid - 1
print(end)
결과
풀이 방법
- 총 예산의 범위가 크고 최적의 상한액을 구해야 하므로
이분탐색
으로 해결하였다.
- while문 조건을 start <= end 로 지정했으므로 탈출 시점에 start는 end보다 1 크다. 따라서 탈출후에 정답으로 end를 출력하거나 (start-1)을 출력하면 된다.