2023-11-01-동국대SW역량강화캠프- 4342. 공유기 설치
문제
집 N개가 수직선 위에 있다. 각각의 집의 좌표는 x1, ⋯, xN이고, 집의 좌표는 모두 다르다.
윌리는 집에 공유기 C개를 설치하려고 한다. 최대한 많은 곳에서 와이파이를 사용하려고 하기 때문에, 한 집에는 공유기를 하나만 설치할 수 있고, 가장 인접한 두 공유기 사이의 거리를 가능한 크게 하여 설치하려고 한다.
C개의 공유기를 N개의 집에 설치할 때, 가장 인접한 두 공유기 사이의 거리의 최댓값을 구해보자.
입력
첫째 줄에 집의 개수 N(2≤N≤200,000)과 공유기의 개수 C(2≤C≤N)이 하나 이상의 빈 칸을 사이에 두고 주어진다.
둘째 줄에 N개의 집의 좌표를 나타내는 xi(0≤xi≤1,000,000,000)가 주어진다.
출력
첫째 줄에 가장 인접한 두 공유기 사이의 최대 거리를 출력한다.
예제 1 입력
5 3
1 2 8 4 9
예제 1 출력
3
Source
N, C = map(int, input().split())
house = list(map(int, input().split()))
house.sort()
l = 0
r = 1000000000
answer = 1000000000
while(l <= r):
# m: 공유기 사이의 거리
m = (l + r) // 2
prev = house[0]
cnt = 1
for i in range(len(house)):
if(house[i] - prev >= m):
prev = house[i]
cnt += 1
if(cnt >= C):
l = m + 1
else:
r = m - 1
print(l - 1)