이번 문제는 이분 탐색을 통해 해결하였다. 여기서의 left는 가장 작을 수 있는 차이인 1로, right는 가장 클 수 있는 차이인 home[-1]-home[0]으로 선언하였다. 그리고 mid를 잡으며 이분 탐색을 통해 가장 인접한 두 공유기 사이의 최대 거리를 구한다. 여기서 mid가 바로 현재의 가장 인접한 두 공유기 사이의 최대 거리가 되는 것이다.
home[-1]-home[0]
으로 선언한다.(left+right)//2
로 선언한다.home[0]
으로 선언한다.home[i]
가 cur+mid
보다 크거나 같을 경우,home[i]
로 갱신한다.mid+1
로 갱신한다.mid-1
로 갱신한다.n, m=map(int, input().split())
answer=0
home=[]
for _ in range(n):
home.append(int(input()))
home.sort()
left, right=1, home[-1]-home[0]
while left<=right:
mid=(left+right)//2
cur=home[0]
cnt=1
for i in range(1, len(home)):
if home[i]>=cur+mid:
cnt+=1
cur=home[i]
if cnt>=m:
left=mid+1
answer=mid
else:
right=mid-1
print(answer)