컴퓨터 배열 n_list를 이분탐색으로 정답 old_com을 찾는다.
start = 1 , end = 2*10^9으로 초기화 하고 mid를 중간 지점으로 잡는다.
n_list의 모든 원소에 대하여 업그레이드 비용을 계산해봤을 때, 주어진 예산(B)를 초과하면 end를 mid로 변경하고 B 이하라면 start를 mid+1로 변경한다.
import sys
input = sys.stdin.readline
INF = int(2e9)
def init():
n,b = map(int,input().split())
n_list = list(map(int,input().split()))
return n,b,n_list
def check(mid):
cost = 0
for i in range(N):
if mid > n_list[i]:
cost += (mid-n_list[i])**2
if cost > B:
return True
return False
def binary_search():
start, end = 1, INF
old_com = 1
while start < end:
mid = (start+end)//2
if check(mid):
end = mid
else:
start = mid+1
old_com = mid
return old_com
N,B,n_list = init()
old_com_max = binary_search()
print(old_com_max)