import sys
r = sys.stdin.readline
k, n = map(int, r().split())
arr = list(int(r()) for _ in range(k))
avg = sum(arr) / n
count = 0
while count < n:
count = 0
avg -= 1
for num in arr:
count += num // avg
print(int(avg))
타겟을 모르는데 어떻게 이분 탐색을 써야하는거지? 하고 고민했다. 그런데 투포인터를 계속 돌리면 lt가 rt를 넘어가는 시점이 있기 때문에 결국 이게 최종 값이란 걸 알게 되었다.
import sys
r = sys.stdin.readline
k, n = map(int, r().split())
arr = list(int(r()) for _ in range(k))
start = 1
end = sum(arr) / n
while start <= end:
mid = (start + end) // 2
count = 0
for num in arr:
count += num // mid
if count >= n:
start = mid + 1
else:
end = mid - 1
print(int(end))