[소프티어] 슈퍼컴퓨터 클러스터

이정연·2023년 2월 6일
0

CodingTest

목록 보기
120/165

과정 설계

컴퓨터 배열 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)
profile
0x68656C6C6F21

0개의 댓글