너무 쉬워서 생략
202
def dduck(array, target, start, end):
while (start <= end):
mid = (start + end) // 2
ssum = 0
for i in array:
if ( i > mid ):
temp = i - mid
ssum += temp
# 떡이 m 미만일 경우
if ( ssum < target ):
end = mid - 1
# 떡이 m과 같거나 초과
else:
result = mid
start = mid + 1
return result
n, m = map(int, input().split())
arr = list(map(int, input().split()))
answer = dduck(arr, m, 0, max(arr))
print(answer)
367
from bisect import bisect_left, bisect_right
n, x = map(int, input().split())
arr = list(map(int, input().split()))
right = bisect_right(arr, x)
left = bisect_left(arr, x)
answer = right - left
if (answer == 0):
print(-1)
else:
print(answer)
368
n = int(input())
arr = list(map(int, input().split()))
left = 0
right = len(arr)-1
while True:
if (left > right):
print(-1)
break
pivot = (left + right)//2
if ( arr[pivot] == pivot ):
print(arr[pivot])
break
# 중간값보다 인덱스가 크면
elif ( arr[pivot] < pivot ):
left = pivot + 1
# 중간값보다 인덱스가 작으면
else:
right = pivot - 1
중간값 == index
끝
중간값 < index
범위 바꾸기
중간값 > index
범위 바꾸기
369 (실버1) 문제
370 (레벨4) 문제