# 코딩 문제 관련/파이썬
백준 2805번(python)
Hwiyong Jo
2020. 7. 27. 21:08
M, M = map(int, input().split())
heights = list(map(int, input().split()))
min_height, max_height = 1, max(heights)
H = 0
while(min_height <= max_height):
mean_height = (min_height + max_height) // 2
cut_num = 0
for height in heights:
if(height > mean_height):
cut_num += (height - mean_height)
# 가져가려고 하느 나무의 길이를 충족했다면,
# 나무를 아끼기 위해 한번 더 조사한다.
if(cut_num >= M):
H = mean_height
min_height = mean_height + 1
# 가져가려고 하는 나무의 길이를 충족하지 못한다면,
# 최대 길이를 낮춘다.
elif(cut_num < M):
max_height = mean_height - 1
print(H)
pypy3로 제출하여 통과하였음. 랜선 자르기를 풀었다면, 쉽게 풀 수 있음.