[Python] 백준 2805 나무자르기 풀이

지민·2022년 8월 10일
0
post-thumbnail
# PROBLEM - 나무자르기
# TIER - S2
# NUMBER - 2805
# DATE - 2022-08-10 22:24
# IDEA - 또 이분탐색 웰노운
import sys
input = sys.stdin.readline

N, M = map(int, input().split())
tree = list(map(int, input().split()))
tree.sort() # 정렬 중요! 

left, right = 0, tree[-1] # 시작점 : 0, 끝점 : 배열에서 가장 큰 원소
while left <= right:  
    mid = (left+right) // 2
    total = 0
    for i in tree: # 잘린 나무 길이의 총합을 total에 저장
        cut = i-mid # 혹시나 음수 저장될까봐 예외처리 
        if cut > 0:
            total += cut
    if total < M: # 자른 길이가 부족하다면 ? 
        right = mid - 1 # right를 줄임 -> mid가 줄어듬 -> 자르는 길이는 늘어남
    else: # 자른 길이가 충분하다면 ?
        left = mid + 1 # 위의 원리와 반대

print(right) 
profile
남들 개발 공부할 때 일기 쓰는 사람

0개의 댓글