https://www.acmicpc.net/problem/2512
num = int(input())
budget = list(map(int, input().split()))
sum_budget = int(input())
start = 1
end = max(budget)
while start <= end :
mid = (start + end) // 2
temp = 0
for i in budget:
if mid < i :
temp += mid
else:
temp += i
if temp <= sum_budget :
start = mid + 1
else :
end = mid - 1
print(end)
이분탐색을 이용하여 문제풀이를 해줍니다.
만약 현재의 값(i)이 mid 값보다 작다면 temp에 현재 값을 더해주고 반대의 상황이라면 mid 값을 더해줍니다.
총 예산보다 temp값이 작다면 start값을 변경, 크다면 end값을 변경해줍니다.