output
#include<stdio.h>
int list[9] = {1,3,5,6,7,9,11,20,30};
int search_binary (int key, int low, int high){ int middle;
//low와 high가 같아질때까지반복
while(low<high) {
middle = (low+high)/2;
// 찾는 값이 중앙값과 일치시 중앙값 반환
if (key == list[middle])
return middle;
// 찾는값이 중앙값보다 작으면 왼쪽 탐색
else if (key <list[middle])
high=middle-1;
//찾는값이 중앙값보다 크면 오른쪽 탐색
else
low = middle+1;
}
// 탐색실패시-1 반환
return -1;
}
// 실행 함수
int main(void){
int num =search_binary(1,0,8);
printf("%d", num);
}
탐색 횟수 0, 1,2 늘어나면 탐색범위는 n, n/2,n/4로 절반씩 줄어든다
탐색범위를 더이상 줄일수 없음 = 1
탐색횟수 k , 탐색범위 n/2^k
arr = []
for _ in range(N):
arr.append(int(input()))
start = max(arr)
end = sum(arr)
while start <= end:
mid = (start+end)//2
now =mid
cnt =1
for i in arr:
if now <i:
now =mid
cnt +=1
now -=i
if cnt > M:
start = mid +1
else :
end = mid -1
ans = mid
print(ans)