210614 - TIL

김예지·2021년 6월 14일
0

나무를 자른다.
https://www.acmicpc.net/problem/2805

이 문제는 이분탐색 문제이다. 무려 4년 전에도 수월하게 풀었던 것으로 추정된다. (C언어로)
반을 잘라보고, 잘 잘리면 위의 반을 잘라본다. 안잘리면 밑의 반을 잘라본다.
코드는 이렇게 생겼다.

def cal(l, i):
    sum = 0
    for j in l:
        if j > i:
            sum += j-i
    return sum


a, b = map(int, input().split())
arr = list(map(int, input().split()))
start = 0
end = max(arr)
while(start <= end):
    mid = (start+end)//2
    t = cal(arr, mid)
    if t >= b:
        start = mid+1
    else:
        end = mid-1
print(end)

근접하지만 부족하지 않은 값을 리턴해야된다는 관념과, 재귀함수로 꼭 구현해야된다는 생각에 사로잡혀 목적을 이루지 못하고 있었다.
내일 다시 풀어보자.

profile
새싹

0개의 댓글