마구간 정하기 (이분탐색, 결정 알고리즘)

2023. 5. 26. 02:56·Coding Test/Search
728x90

문제

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

자연수 N(3<=N<=200,000)과 C(2<=C<=N)
마구간의 좌표 xi(0<=xi<=1,000,000,000)
5 3
1
2
8
4
9

분석

 

풀이

import sys
input=sys.stdin.readline

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

a.sort()
l=1
r=a[n-1]

def count(len): # 배치한 말 수 체크
    cnt=1
    ep=a[0] # 마지막으로 배치한 말의 좌표
    for i in range(1,n):
        if a[i]-ep >= len: # 두 말사이 거리 len을 두고 배치 가능하다면
            cnt+=1 # 마 수 증가
            ep=a[i] # 마지막 말 좌표 변경
    return cnt

# 이분탐색
while l<=r:
    mid=(l+r)//2
    if count(mid)>=c: # 배치해야 하는 말의수보다 배치한 말의 수가 크다면
        res=mid # 말 사이 거리
        l=mid+1 # 말 사이 거리 증가
    else: # 거리가 너무 길어서 배치해야하는 말을 다 배치하지 못하면
        r=mid-1 # 말 사이 거리 감소

print(res)

 

 

 

728x90
저작자표시 비영리 변경금지
'Coding Test/Search' 카테고리의 다른 글
  • [1300] k번째 수 (이분탐색, 2차원 배열)
  • [2343] 기타 레슨 (블루레이 만들기, 이진탐색)
  • 뮤직비디오 (이분탐색, 결정 알고리즘)
  • [1654] 랜선 자르기(이분탐색, 결정 알고리즘)
Karla Ko
Karla Ko
𝘾𝙤𝙣𝙩𝙞𝙣𝙪𝙤𝙪𝙨𝙡𝙮 𝙄𝙢𝙥𝙧𝙤𝙫𝙞𝙣𝙜, 𝘾𝙤𝙣𝙨𝙩𝙖𝙣𝙩𝙡𝙮 𝘿𝙚𝙫𝙚𝙡𝙤𝙥𝙞𝙣𝙜 𝙔𝙚𝙨!
    250x250
  • Karla Ko
    karlaLog
    Karla Ko
  • 전체
    오늘
    어제
    • Total (467)
      • Spring (19)
      • JPA (4)
      • Cloud & Architecture (15)
        • Kubernetes (5)
        • Docker (3)
        • MSA (2)
        • GCP (1)
        • AWS (4)
      • Devops (1)
      • Message Queue (4)
        • Kafka (2)
        • RabbitMQ (2)
      • Git (4)
      • DB (4)
      • Java (9)
      • Python (4)
      • CS (11)
        • OS (8)
        • Network (2)
        • Algorithm (1)
      • Coding Test (392)
        • programmers (156)
        • Graph (43)
        • DP (37)
        • Search (31)
        • Tree (13)
        • Data Structure (26)
        • Combination (12)
        • Implement (18)
        • Geedy (23)
        • Sort (7)
        • Math (21)
        • geometry (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    구현
    이분탐색
    스택
    LIS
    DP
    최소신장트리
    백준
    DFS
    파이썬
    조합
    BFS
    트리
    월간코드챌린지
    자료구조
    구간합
    정렬
    동적계획법
    다익스트라
    최단거리
    큐
    힙
    플로이드워셜
    Algorithm
    재귀
    그리디
    최대공약수
    그래프
    알고리즘
    덱
    프로그래머스
  • hELLO· Designed By정상우.v4.10.3
Karla Ko
마구간 정하기 (이분탐색, 결정 알고리즘)
상단으로

티스토리툴바