BAEKJOON-2110-공유기설치

A Yeon Jang·2025년 7월 23일

백준_문제풀이

목록 보기
4/8

📡 공유기 설치 문제 (백준 2110번)


🧐 문제 해석

  • N개의 집이 1차원 좌표상에 주어진다.
  • 이 중 C개의 집에 공유기를 설치할 것인데,
  • 공유기 사이의 거리를 가능한 크게 하여 설치해야 한다.
  • 출력: 가능한 최대 거리

🔍 핵심 아이디어

  • 공유기 간 최소 거리를 mid로 설정하여,
  • 이 거리로 공유기를 C개 이상 설치할 수 있는지 판단.
  • → 이분 탐색으로 최적의 최대 거리를 구함!

🧠핵심 함수: can_set(min_dist)

def can_set(min_dist):
    count = 1
    last = home[0]
    for i in range(1, n):
        if home[i] - last >= min_dist:
            count += 1
            last = home[i]
    return count >= c
  • min_dist : 이번 탐색에서 기준이 되는 가장 인접한 거리
  • min_dust 이상의 간격을 유지하며 공유기 설치
  • 가능한 설치 개수가 C 이상이면 True, 아니면 False
  • 바로 옆 집을 탐색하는게 아닌 최소 거리를 만족하는 집을 탐색하는 것

⚙️ 이분 탐색 로직

left = 1  # 최소 거리
right = home[-1] - home[0]  # 최대 거리
answer = 0

while left <= right:
    mid = (left + right) // 2
    if can_set(mid):
        answer = mid
        left = mid + 1  # 더 넓은 거리 도전!
    else:
        right = mid - 1  # 거리가 너무 큼 → 줄여!
  • answer : 거리를 조정하기 전에 가능한 최적의 답 저장하기

0개의 댓글