BOJ - 2805

주의·2024년 1월 26일
0

boj

목록 보기
124/214

백준 문제 링크
나무 자르기

❓접근법

  1. 나무의 높이를 array로 받아준다.
  2. 초기값 start = 1, end = max(array)로 지정한다.
  3. 기본 이분 탐색 코드에서
    array의 원소가 mid보다 크다면 total에 원소 - mid를 더해준다.
  • 만약 total >= M이면 start = mid + 1, result = mid로 지정한다.
  • 만약 total < M이면 end = mid - 1로 지정한다.
  1. result를 출력하면 끝!

👌🏻코드

N, M = map(int, input().split())
array = list(map(int, input().split()))

start = 1
end = max(array)
result = 0
while start <= end:
    
    mid = (start + end) // 2
    total = 0
    
    for i in array:
        if i >= mid:
            total += i - mid
        
    if total >= M: # 적어도 M미터 이상일 때 높이를 찾자
        start = mid + 1
        result = mid
    else:
        end = mid - 1
        
print(result)

0개의 댓글