# 코딩 문제 관련/파이썬

백준 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로 제출하여 통과하였음. 랜선 자르기를 풀었다면, 쉽게 풀 수 있음.