정구리의 우주정복

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

ALGORITHM/SOLVE

[BOJ] 백준 2805번 - 나무 자르기 파이썬 이분탐색

Jungry_ 2020. 9. 8. 00:12
반응형

www.acmicpc.net/problem/2805

 

2805번: 나무 자르기

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

www.acmicpc.net


이분 탐색을 이용한 풀이 (pypy 로 제출해야지 정답처리가 됩니다)

#나무 자르기 (pypy 로 해결시 해결됨)
import sys

n,m = map(int,sys.stdin.readline().split())
array = list(map(int,sys.stdin.readline().split()))

start = 0
end = max(array)

result = 0
while start <= end:
    total = 0
    mid = (start + end) // 2

    for i in array:
        if i > mid:
            total += i-mid
    if total <m: #나무가 적은 경우 (end 조정)
        end = mid -1
    else:
        result = mid
        start = mid + 1
print(result)
    
반응형
Comments