STUDY/Coding
이진탐색
sohexz
2021. 11. 17. 21:19
이것이 코딩테스트다 - 369p 29번 문제
집의 개수 N
공유기의 개수 C
한 집에는 공유기 1개 설치할 수 있음
공유기와 공유기의 사이를 멀게 설치해야 함
(가능한 거리를 크게!)
n, c = list(map(int, input().split(''))) #집의 개수 n, 공유기 개수 c 입력받기
array=[] #전체 집의 좌표 정보 입력받기
for _ in range(n):
array.append(int(input()))
array.sort() #이진 탐색을 위해 정렬
start=1 //최소 거리
end=array[-1] - array[0] #최대 거리
result=0
while(start <= end):
mid = (start + end) //2 #가장 가까이에 있는 두 공유기 사이의 거리
value =array[0]
count=1
for i in range(1,n): #앞에서부터 설치
if array[i] >=value + mid:
value=array[i]
count+=1
if count >= c: # c개 이상의 공유기를 설치할 수 있는 경우, 거리 증가
start=mid+1
result = mid #최적의 공유기 설치 장소 저장
else: #c개 이상의 공유기를 설치할 수 없는 경우, 거리 감소
end=mid-1
print(result)