📡 공유기 설치 문제 (백준 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 : 거리를 조정하기 전에 가능한 최적의 답 저장하기