본문 바로가기
Computer Science/Algorithm

[백준] 2110 - 공유기 설치 (Python)

by 수제햄버거 2021. 4. 9.
728x90
반응형

문제 출처:

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

문제 풀이 :

  • 앞서 본 이분탐색과 같은 문제이다.
  • 이런 문제류에서 바뀌는 부분은 찾는 특정값을 비교할때 사용되는 결과값을 구하는 부분인데 여기서는 아마 gap을 구하는 부분만 신경 써주면 될 것이다.
    • 보통 for문으로 구하니까 복잡하지 않은 이분탐색 문제에선 while문 안에 있는 for문을 신경써서 보면 문제가 쉽게 이해가 된다.
n, c = map(int, input().split())

house = []
for _ in range(n):
    x = int(input())
    house.append(x)

house.sort()

start = 1
end = house[-1] - house[0]

result = 0

while (start <= end):
    mid = (start + end) // 2
    old = house[0]
    count = 1

    for i in range(1, len(house)):
        if house[i] >= old + mid: 
            count += 1
            old = house[i]

    if count >= c:
        start = mid + 1
        result = mid
    else:
        end = mid - 1

print(result)
반응형