728x90
n, c = list(map(int, input().split(' ')))
array = []
for _ in range(n):
array.append(int(input()))
array.sort()
start = array[1] - array[0]
end = array[-1] - array[0]
result = 0
while (start <= end):
mid = (start + end) // 2 # mid = the gap between two nearest routers.
value = array[0]
count = 1
# install router with current mid
for i in range(1, n):
if array[i] >= value + mid:
value = array[i]
print("installing to {} as {}th router".format(array[i], count))
count += 1
if count >= c: # if more than c routers can be installed, increase range
print("increase")
start = mid + 1 # increase range
result = mid # save optimal result
else: # if not more than c, reduce range
print("decrease")
end = mid - 1
print("result = {}".format(result))
print(result)
728x90
'BOJ' 카테고리의 다른 글
[BinarySearch] 가장 긴 증가하는 부분 수열 2 (0) | 2020.12.03 |
---|---|
[BinarySearch] 수들의 합 (0) | 2020.12.01 |
[BinarySearch] 예산 (0) | 2020.11.29 |
[BinarySearch&Counter] 숫자 카드 2 (0) | 2020.11.27 |
[BinarySearch] 랜선 자르기 (0) | 2020.11.20 |
댓글