이진탐색 + 파라메트세트릭 서치
nm 입력받기 (n:떡개수, m:요청길이)
dduk (list) 입력받기
dduk 정렬하기
while(true) :
중앙값을 잡아준다
mid=(start+end)//2
절단할 기준을 중앙값으로 잡아준다
n = dduk[mid]
떡을 하나씩 기준n대로 잘라주고 total에 고객이 가져갈 값을 넣어준다
for i range(len[dduk]):
result = dduk[i]-n
total += result
if total == m:
return n
elif total > m :
start = mid+1
elif total < m :
end = mid-1
'
import sys
n,m = map(int,input().split())
dduk = list(map(int,sys.stdin.readline().split()))
dduk.sort()
start=0
end=max(dduk)
result=0
while start <= end :
print('start', start)
print('end',end)
mid = (start+end) // 2
print('mid', mid)
total=0
#떡의 개수만큼 반복
for i in range(len(dduk)):
# 떡길이-기준(n)
if dduk[i] > mid :
total += dduk[i]-mid
# 고객이 가져가는 총 길이 toal
# 가져가는 양 < 요청길이 (n이 작아져야함 - 왼쪽부분탐색)
if total < m :
end = mid-1
# 가져가는양 > 요청길이 (n이 커져야함 - 오른쪽부분 탐색)
else :
#최대한 덜 잘렸을 때가 기준이므로 여기서 기록!!
result= mid
start = mid+1
print(result)