본문 바로가기

파이썬 알고리즘 풀이

25)마구간 정하기

목표

C마리의 말을 N개의 마구간에 배치했을 때 가장 가까운 두 말의 거리가 최대가 되는 그 최대 값을 출력하는 프로그램을 작성하기

 

조건

N개의 마구간이 수직선상에 있습니다. 각 마구간은 x1, x2, x3, ......, xN의 좌표를 가지며, 마 구간간에 좌표가 중복되는 일은 없습니다.

현수는 C마리의 말을 가지고 있는데, 이 말들은 서로 가까이 있는 것을 좋아하지 않습니다.

 

각 마구간에는 한 마리의 말만 넣을 수 있고, 가장 가까운 두 말의 거리가 최대가 되게 말을 마구간에 배치하고 싶습니다.

 

제한사항

첫 줄에 자연수 N(3<=N<=200,000)과 C(2<=C<=N)이 공백을 사이에 두고 주어집니다.

 

둘째 줄부터 N개의 줄에 걸쳐 마구간의 좌표 xi(0<=xi<=1,000,000,000)가 한 줄에 하나씩 주어집니다.

 

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

 

문제풀이

def count(distance):
  cnt=1
  ep=a[0]

  for i in range(1, N):
    if a[i]-ep>=distance:
      cnt+=1
      ep=a[i]

  return cnt

N, C=map(int, input().split())
a=[]
for _ in range(N):
  a.append(int(input()))
a.sort()

lt=a[0]
rt=a[N-1]
res=0

while lt<=rt:
  mid=(lt+rt)//2
  if count(mid)>=C:
    res=mid
    lt=mid+1
  else:
    rt=mid-1

print(res)

'파이썬 알고리즘 풀이' 카테고리의 다른 글

27)씨름 선수  (0) 2021.10.27
26)회의실 배정  (0) 2021.10.27
24) 뮤직비디오  (0) 2021.10.25
23) 랜선자르기  (0) 2021.10.22
22) 이분검색  (0) 2021.10.22