n,c=map(int,input().split())
x=[]
for i in range(n):
x.append(int(input()))
x.sort()
mn,mx=(x[1]-x[0]),(x[-1]-x[0]) ###############
result=0
while mn<=mx:
cnt=1
mid=(mn+mx)//2
v=x[0]
for i in range(1,len(x)):
if x[i]>=mid+v:
v=x[i]
cnt+=1
if cnt>=c:
result=mid
mn=mid+1
else:
mx=mid-1
print(result)
최소 간격(mn)을 배열의 첫번째 값과 두번째 값의 차이로 하면 실제 최소 간격이 이와 다를 수 있으므로 옳지 않다. 따라서 최소 간격을 1로 설정해주고 순차적으로 늘려주어야 한다.
n,c=map(int,input().split())
x=[]
for i in range(n):
x.append(int(input()))
x.sort()
mn,mx=1,(x[-1]-x[0])#최소 간격, 최대간격 계산
result=0
while mn<=mx:
cnt=1 #공유기의 개수, 기준위치를 만족하는 집의 개수
mid=(mn+mx)//2 #설치 간격(기준 위치)
v=x[0] #처음집부터 순차적으로 설치
for i in range(1,len(x)):#배열 접근, 인덱스0은 제외
if x[i]>=mid+v: #현재 집의 위치값(배열값)이 간격보다 크다면
cnt+=1 #공유기의 개수 1증가
v=x[i] #값을 현재 값으로 갱신
if cnt>=c: #적게 설치되어야 함, 간격을 늘려야 함
result=mid #인접한 공유기 간 최대 거리
mn=mid+1
else:#더 설치되어야 함, 간격을 줄여야 함
mx=mid-1
print(result)#거리 출력
접근 방법