문제설명
나무들의 높이와 필요한 나무의 양을 입력받고 어느 높이에서 잘랐을 때 최대한 적은 양을 가져갈수 있는지 출력하는 문제입니다.
작동 순서
1. 나무의 높이와 필요한 양을 입력받습니다.
2. 이진탐색을 활용하기위해 반복문을 실행해줍니다.
3. 자를 높이로 나무를 잘랐을 때 가져가는 나무의 양이 필요한양보다 많아지면 maxLength에 저장합니다.
4. 반복문을 종료하고 maxLength를 출력합니다.
소스코드
import sys
N, M = map(int, sys.stdin.readline().split())
arr = list(map(int, sys.stdin.readline().split()))
start = 1
final = max(arr)
maxLength = 0
while start <= final:
mid = (start+final)//2
tree = sum([i-mid if i > mid else 0 for i in arr])
if tree >= M:
start = mid+1
maxLength = mid
else:
final = mid-1
print(maxLength, end='')