[백준] 나무 자르기 (2805번) - 이진 탐색
🔗 문제 링크
https://www.acmicpc.net/problem/2805
💻 코드
N, M = map(int, input().split())
tree = list(map(int, input().split()))
def binary_search(target, start, end):
    result_max = 0  # 나무 높이의 합이 정확히 M으로 떨어지지 않을 때 최댓값
    while start <= end:
        result = 0
        mid = (start + end) // 2
        for i in tree:
            if i > mid:
                result += i - mid
        if result == target:
            return mid
        elif result > target :
            result_max = mid
            start = mid + 1
        else :
            end = mid - 1
    return result_max
print(binary_search(M, 0, max(tree)))
설계
N, M = map(int, input().split())
tree = list(map(int, input().split()))
def binary_search(target, start, end):
    result_max = 0  # 나무 높이의 합이 정확히 M으로 떨어지지 않을 때 최댓값
    while start <= end:
        result = 0
        mid = (start + end) // 2
        for i in tree:
            if i > mid:
                result += i - mid
        if result == target:
            return mid
        elif result > target :
            result_max = mid
            start = mid + 1
        else :
            end = mid - 1
    return result_max
print(binary_search(M, 0, max(tree)))
나무의 높이의 합은 정확히 M이 되지 않을 수도 있다. 이때, 절단된 나무의 높이의 합이 M보다 크고 절단기에 설정할 수 있는 높이의 최댓값을 위의 코드에서 result > target일 때 구할 수 있으므로 result_max에 값을 저장해 놓고 반환한다.
Author And Source
이 문제에 관하여([백준] 나무 자르기 (2805번) - 이진 탐색), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@xxwb__/백준-나무-자르기-2805번-이진-탐색저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)