리셋 되지 말자

[백준 2805] 나무 자르기 - 이분 탐색 본문

알고리즘

[백준 2805] 나무 자르기 - 이분 탐색

kyeongjun-dev 2022. 1. 13. 22:04

코드

# 목표 갯수 : n, 나무 길이 목록 : arr
def solution(n, arr):
    left = 1
    right = max(arr)
    mid = right
    while left <= right:
        tmp = 0
        mid = (left + right) // 2
        
        for tree in arr:
            if tree - mid <= 0:
                continue
            tmp += tree - mid
        # 잘린 길이가 목표 길이보다 길면, 높이를 더 위로 설정
        if tmp >= n:
            left = mid + 1
        # 잘린 길이가 목표 길이보다 짧으면, 높이를 더 아래로 설정
        elif tmp < n:
            right = mid - 1
        
    print(right)




a, n = map(int, input().split())
arr = list(map(int, input().split()))
solution(n, arr)
Comments