백준 문제 링크
나무 자르기
- 나무의 높이를 array로 받아준다.
- 초기값 start = 1, end = max(array)로 지정한다.
- 기본 이분 탐색 코드에서
array의 원소가 mid보다 크다면 total에 원소 - mid를 더해준다.
- 만약 total >= M이면 start = mid + 1, result = mid로 지정한다.
- 만약 total < M이면 end = mid - 1로 지정한다.
- result를 출력하면 끝!
N, M = map(int, input().split())
array = list(map(int, input().split()))
start = 1
end = max(array)
result = 0
while start <= end:
mid = (start + end) // 2
total = 0
for i in array:
if i >= mid:
total += i - mid
if total >= M: # 적어도 M미터 이상일 때 높이를 찾자
start = mid + 1
result = mid
else:
end = mid - 1
print(result)