Algorithms/Binary Search
[이진 탐색 알고리즘] 공유기 설치 S1
잉숭
2021. 7. 5. 11:33
기출 : BOJ #2110
변경할 값은 인접 공유기 사이의 최대 거리이고 체크할 함수는 해당 거리일 경우 설치 가능한 공유기의 개수를 출력한다
공유기 개수가 목표한 값보다 큰경우 답을 갱신하고 범위를 줄여 다시 탐색한다
answer = 0
n,c = map(int,input().split())
h = list()
for _ in range(n):
h.append(int(input()))
h.sort()
def check(val):
global h
res = 1
ex = h[0]
for p in h:
if p>=ex+val:
res += 1
ex = p
return res
def bs(st, en, target):
global answer
if st>en:
return -1
mid = (st+en)//2
val = check(mid)
if val>=target:
answer = mid
bs(mid+1, en, target)
else:
bs(st, mid-1, target)
bs(0,h[n-1],c)
print(answer)