백준 알고리즘 - 2805. 나무 자르기

2024. 3. 6. 18:53코딩 테스트/백준

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

 

2805번: 나무 자르기

첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보

www.acmicpc.net

 

전체 풀이

# Code
def solution(trees: list, m):
    result = 0
    low, high = 1, sum(trees)
    while low <= high:
        mid = (low + high) // 2

        tree_amount = sum([tree - mid for tree in trees if tree > mid])

        if tree_amount >= m:
            low = mid + 1
            result = mid
        else:
            high = mid - 1

    return result


# --- submit ---
n, m = map(int, input().split())
heights = list(map(int, input().split()))
print(solution(heights, m))