시작이 반

[백준] 2805번번 (python 파이썬) 본문

알고리즘/백준

[백준] 2805번번 (python 파이썬)

G_Gi 2021. 3. 17. 15:51
SMALL

https://www.acmicpc.net/problem/2805

 

나무를 0미터를 가져갈 수 도있고 최대 높이를 가져갈 수도있다.

즉 절단기의 길이는

최대 높이를 자르려면 맨 밑동을 잘라야한다 -> 0

0미터를 가져간다면 가장큰 높이의 나무만큼 절단기 높이를 설정한다 -> max(trees)

n, m = map(int, input().split(' '))
trees = list(map(int, input().split(' ')))


def binary():
    left = 0
    right = max(trees)

    while left <= right:
        mid = (left + right) // 2
        height = 0
        for tree in trees:
            if tree - mid > 0:
                height += tree - mid

        if height >= m:  # 잘린 길이가 구하려는 것보다 크면 더 큰높이로 자르기
            left = mid + 1
        elif height < m:  # 잘린 길이가 구하려는 것보다 작으면 더 작은 높이로 자르기
            right = mid - 1
    return right


print(binary())
LIST