b_공유기설치_2110
| source | www.acmicpc.net/problem/2110 |
| type | 📌 개발노트 |
| topics | 600-알고리즘 & 코딩테스트 610 이진탐색 |
| types | 문제풀이 |
| 정답여부 | 성공 |
문제
집 N개
집 같은 좌표 ㄴㄴ
공유기 C개 설치하려고함
최대한 많은곳에서 와이파이 사용하려고함
가장인접한 공유기 사이의 거리를 가장크게하려고함
답
dp라고생각했다. 응아니얌
어디에 공유기 둘것인지 지정하지말고
공유기 사이를 거리를 지정해야한다
start = 1 # 공유기 거리 최소
end = arr[-1] - arr[0] # 공유기 거리 최대
result = 0
# <span id="재귀로-적절한-두-공유기-사이의-거리를-찾는다"></span>재귀로 적절한 두 공유기 사이의 거리를 찾는다
while (start <= end):
mid = (start + end) // 2 # 현재 공유기 거리
current = arr[0]
count = 1
# 공유기 설치 몇 대 할 수 있는지 체크
for i in range(1, len(arr)):
if arr[i] >= current + mid:
count += 1
current = arr[i]
# 공유기 설치 수가 목표 보다 크면 공유기 사이 거리 늘림
if count >= C:
start = mid + 1
result = mid
# 공유기 설치 수가 목표 보다 작으면 공유기 사이 거리 줄임
else:
end = mid - 1
print(result)