서버실은 여러 대의 서버 컴퓨터들을 안정적으로 운영할 수 있는 환경을 유지하기 위해 설치된 공간을 말한다.
이 회사의 서버실은 N×N 칸으로 구분되어 있고, 각 칸마다 서버 랙이 있어 컴퓨터를 여러 대 쌓을 수 있다. 서버가 과열되지 않도록 서버실에는 언제나 냉방기가 작동하고 있다. 그런데 회사가 경제적으로 어려움에 처한 나머지, 서버실의 운영 비용을 줄이기 위해 서버실 내의 컴퓨터 중 절반만 정상적으로 관리하기로 하였다.
냉방기에서 나온 차가운 공기는 서버실의 아래쪽부터 서서히 차오른다. 1분마다 컴퓨터 한 대의 높이만큼 방을 채운다. 이 회사의 서버 컴퓨터는 환경에 매우 민감하여 차가운 공기를 받아야만 동작하고 그렇지 못하면 장애를 일으킨다.
서버실의 컴퓨터 중 절반 이상이 켜지려면 몇 분이 필요할까?
import sys
input = lambda: sys.stdin.readline().strip()
n = int(input())
arr = []
for _ in range(n):
arr.append(list(map(int, input().split())))
global computers
computers = sum(sum(a) for a in arr) + 1
def binary_search(arr, start, end):
global computers
time = 0
while start <= end:
mid = (start + end) // 2
cnt = 0
for com in arr:
for c in com:
cnt += min(c, mid)
if cnt >= (computers // 2):
time = mid
end = mid - 1
else:
start = mid + 1
return time
end = 0
for array in arr:
for a in array:
end = max(a, end)
print(binary_search(arr, 1, end))