importsysfromtypingimportListdefsolution(C:int,houses:List[int])->int:answer=0houses.sort()# lt: 최소 공유기 거리 -> 1
# rt: 최대 공유기 거리 -> (맨 끝 - 맨 앞)
lt,rt=1,houses[-1]-houses[0],whilelt<=rt:current=houses[0]mid=(lt+rt)//2# cnt: lt를 1로 둔 것과 같은 이유
cnt=1# 맨 앞에는 항상 공유기를 설치해야 -> 거리가 최대가 될 수 있음
foriinrange(1,len(houses)):ifhouses[i]-current>=mid:current=houses[i]cnt+=1ifcnt>=C:# 위 조건에 answer를 mid의 값으로 갱신
ifanswer<mid:answer=midlt=mid+1continue# if cnt < C: -> mid 값이 너무 크다는 뜻
rt=mid-1returnanswerN,C=map(int,sys.stdin.readline().rstrip().split())houses=[]for_inrange(N):houses.append(int(sys.stdin.readline().rstrip()))print(solution(C,houses))
Leave a comment