Algorithm/Python

[백준 2110] 공유기 설치

🥭맹2 2021. 3. 31. 21:13

1. 문제

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

2. 접근 방법

이진탐색을 해야합니다.

3. 코드

import sys
N, C = map(int, sys.stdin.readline().rstrip().split())
nums = []
for _ in range(N):
    nums.append(int(sys.stdin.readline().rstrip()))
nums.sort()

start = 1
end = nums[-1] - nums[0]
result = 0

while (start <= end):
    mid = (start + end) // 2
    val = nums[0]
    cnt = 1
    for i in range(1, N):
        if nums[i] >= val + mid:
            val = nums[i]
            cnt += 1
    if cnt >= C:
        start = mid + 1
        result = mid
    else:
        end = mid - 1

print(result)

4. 마치며

참고로 sys와 sys를 쓰지 않는 것은 엄청난 시간 차이를 보여줍니다 ,, 후우 ~!

무려 6배나 ..!

'Algorithm > Python' 카테고리의 다른 글

[백준 13459] 구슬 탈출  (0) 2021.04.14
[백준 17090] 미로 탈출하기  (0) 2021.04.14
[백준 1715] 카드 정렬하기  (0) 2021.03.26
[백준 16235] 나무 재테크  (0) 2021.03.16
[백준 2847] 게임을 만든 동준이  (2) 2021.03.05