백준 문제 링크
예산
- 예산 요청 데이터를 array에 넣어주고 정렬한다.
- 초기값은 start = 1, end = max(array)로 지정한다.
- 기본 이분 탐색 코드에서,
array의 원소가 mid보다 크거나 같으면 mid를 total에 더하고,
array의 원소가 mid보다 작으면 원소를 total에 더한다.- 그 다음 조건은 아래와 같다.
- total이 목표 값 M보다 작거나 같으면
start = mid + 1, answer에 mid를 넣어준다.- total이 목표 값 M보다 크다면
end = mid - 1로 지정한다.
- 마지막으로 answer에서 가장 큰 값을 출력하면 끝!
N = int(input())
array = list(map(int, input().split()))
M = int(input())
array.sort()
start = 1
end = max(array)
answer = []
while start <= end:
mid = (start + end) // 2
total = 0
for x in array:
if mid <= x:
total += mid
else:
total += x
if total <= M:
start = mid + 1
answer.append(mid)
else:
end = mid - 1
print(max(answer))