2110번: 공유기 설치
첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 주어진다. 둘째 줄부터 N개의 줄에는 집의 좌표를 나타내는 xi (1 ≤ xi ≤ 1,000,000,000)가 �
www.acmicpc.net
O(NLogX) = 20만*30 = 600만
import sys
# 공유기 사이의 거리 (mid) => 이분탐색
def search(houses, C):
res = 0
start, end = 1, houses[-1] - houses[0]
while start <= end:
mid = (start + end) // 2
cnt = device_cnt(houses, mid) # 설치 가능한 공유기의 개수
if cnt < C:
end = mid - 1
else:
start = mid + 1
res = mid
return res
# ([1, 2, 4, 8, 9], 4) => 2개
def device_cnt(h, d):
pos, cnt = 0, 1
for i in range(1, len(h)):
if h[i] - h[pos] >= d:
cnt += 1
pos = i
return cnt
N, C = map(int, input().split())
houses = [int(sys.stdin.readline()) for _ in range(N)]
houses.sort()
print(search(houses, C))
'BOJ 알고리즘 (패캠) > 정렬, 탐색' 카테고리의 다른 글
1991번: 트리 순회 (트리, 재귀) - Fastcampus (0) | 2020.10.07 |
---|---|
1939번: 중량제한 (탐색, 이분탐색, BFS) - Fastcampus (0) | 2020.10.07 |
1236번: 성 지키기 (탐색) - Fastcampus (0) | 2020.10.06 |
1668번: 트로피 진열 (탐색) - Fastcampus (0) | 2020.10.06 |
1302번: 베스트셀러 (탐색) - Fastcampus (0) | 2020.10.06 |