Computer Science/Algorithm
[백준] 2110 - 공유기 설치 (Python)
수제햄버거
2021. 4. 9. 19:31
728x90
반응형
문제 출처:
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)
반응형