본문 바로가기
Beakjoon&프로그래머스/파이썬

[백준/파이썬]2805번 나무 자르기

by 현장 2021. 5. 12.

-코드

n, m = map(int, input().split())
a = list(map(int, input().split()))
start = 1
end = max(a)
result = 0
while start <= end:
    mid = (start + end) // 2
    r = 0
    for l in a:
        if l > mid:
            r += l - mid
    if r >= m:
        start = mid + 1
        result = mid
    else:
        end = mid - 1
print(result)

랜선 자르기와 비슷한데 r의 값이 m과 동일해야 하므로 이전 문제와 다르게 end를 max(a)로 하고 for문을 조건문을 안 쓰고 했더니 음수 값도 더해져서 이상한 값이 나오기 때문에 추가해 주었습니다. 그리고 r == m일 경우 mid값을 출력하게 했으나 틀려서 찾아보니 if문안에 result = mid를 넣으면 해결이 가능해서 해결했습니다. 하지만 어떻게 해도 시간 초과가 떠서 pypy3로 제출했습니다.