문제 링크
https://www.acmicpc.net/problem/2110
2110번: 공유기 설치
첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 주어진다. 둘째 줄부터 N개의 줄에는 집의 좌표를 나타내는 xi (0 ≤ xi ≤ 1,000,000,000)가
www.acmicpc.net
문제
문제 풀이
이진 탐색을 통해 풀이를 했다.
입력받은 집의 위치에 대해 먼저 정렬을 진행하고,
이진 탐색에 대한 끝점을 제일 긴 거리로 처음에 두어 이진탐색을 진행한다.
변수 current는 공유기를 둔 위치를 나타낸다.
import sys
N, C = map(int, sys.stdin.readline().split())
house = [int(sys.stdin.readline()) for _ in range(N)]
house.sort()
start = 1
end = house[-1] - house[0]
result = []
while start <= end:
count = 1
mid = (start + end) // 2
current = house[0]
for x in house:
if current + mid <= x:
count += 1
current = x
if count >= C:
start = mid + 1
result.append(mid)
else:
end = mid - 1
print(max(result))
'Algorithm > BOJ' 카테고리의 다른 글
[백준] 11728 배열 합치기 (파이썬 python) (0) | 2022.01.27 |
---|---|
[백준] 10815 숫자 카드 (파이썬 python) (0) | 2022.01.26 |
[백준] 2805 나무 자르기 (파이썬 python) (0) | 2022.01.26 |
[백준] 1654 랜선 자르기 (파이썬 python) (0) | 2022.01.26 |
[백준] 1373 2진수 8진수 (파이썬 python) (0) | 2022.01.25 |