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