문제
2110번: 공유기 설치
첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 주어진다. 둘째 줄부터 N개의 줄에는 집의 좌표를 나타내는 xi (0 ≤ xi ≤ 1,000,000,000)가
www.acmicpc.net
입력 예시
5 3
1
2
8
4
9
출력 예시
3
문제 풀이
- 공유기를 설치하려는 집들을 오름차순으로 정렬
- 이진탐색을 진행하면서 거리조절
- 가능한 최소거리와 최대거리를 구해 중간 값을 구한 뒤 그 거리만큼 떨어진 집들에 공유기를 설치했을 때 c개이상인지 확인
- c개 이상이거나 같다면 값을 저장한 후 최댓값 찾기 위해 오른쪽탐색
- c개 미만이라면 왼쪽 탐색
- 저장된 값 출력

코드
import sys
n, c = map(int,sys.stdin.readline().split())
array = []
for _ in range(n):
array.append(int(sys.stdin.readline()))
array.sort()
start = 1 # 최소 거리차
end = array[-1] - array[0]
result = 0
# 거리 줄여가면서 탐색
while start <= end:
count = 1 # 공유기 개수
set_up = array[0]
mid = (start + end) // 2
# mid 만큼 증가시켜가면서 공유기 설치
for i in range(1, n):
if array[i] >= mid + set_up:
count += 1
set_up = array[i]
# 공유기 수가 같거나 더 많은 경우 범위 넓히기
if count >= c:
start = mid + 1
result = mid
else:
end = mid - 1
print(result)'Algorithm > Binary Search' 카테고리의 다른 글
| [Python] 가사 검색 (0) | 2023.01.27 |
|---|---|
| [Python] 고정점 찾기 (0) | 2023.01.26 |
| [Python] 정렬된 배열에서 특정 수의 개수 구하기 (0) | 2023.01.26 |
| [Python] 떡볶이 떡 만들기 (2) | 2023.01.26 |
| [Python] 부품찾기 (0) | 2023.01.26 |