마구간 정하기/파이썬/Python/이분 탐색/결정 알고리즘

heeee·2021년 1월 14일
0

algorithm

목록 보기
36/123

💡문제

N개의 마구간이 수직선상에 있습니다. 각 마구간은 x1, x2, x3, ......, xN의 좌표를 가지며, 마
구간간에 좌표가 중복되는 일은 없습니다.
현수는 C마리의 말을 가지고 있는데, 이 말들은 서로 가까이 있는 것을 좋아하지 않습니다.
각 마구간에는 한 마리의 말만 넣을 수 있고, 가장 가까운 두 말의 거리가 최대가 되게 말을
마구간에 배치하고 싶습니다.
C마리의 말을 N개의 마구간에 배치했을 때 가장 가까운 두 말의 거리가 최대가 되는 그 최대
값을 출력하는 프로그램을 작성하세요.

입력

첫 줄에 자연수 N(3<=N<=200,000)과 C(2<=C<=N)이 공백을 사이에 두고 주어집니다.
둘째 줄부터 N개의 줄에 걸쳐 마구간의 좌표 xi(0<=xi<=1,000,000,000)가 한 줄에 하나씩
주어집니다.

출력

첫 줄에 가장 가까운 두 말의 최대 거리를 출력하세요.


예제입력

5 3
1
2
8
4
9

예제출력

3

📖내가 작성한 code

def count(distance):
    #거리 입력하면 둘 수 있는 말 갯수 출력하는 함수
    cnt=1
    s=a[0]
    for i in range(1,n):
        if a[i] - s >= distance:
            s = a[i]
            cnt += 1
    return cnt

n,c=map(int,input().split())
a=[int(input()) for _ in range(n)]

a.sort()

lt=1
rt=max(a)-min(a)
while lt<=rt:
    mid=(lt+rt)//2
    if count(mid)>=c:
        res=mid
        lt=mid+1
    else:
        rt=mid-1
print(res)

0개의 댓글