-
Notifications
You must be signed in to change notification settings - Fork 845
/
3.py
30 lines (26 loc) · 1.12 KB
/
3.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 집의 개수(N)와 공유기의 개수(C)를 입력 받기
n, c = list(map(int, input().split(' ')))
# 전체 집의 좌표 정보를 입력 받기
array = []
for _ in range(n):
array.append(int(input()))
array.sort() # 이진 탐색 수행을 위해 정렬 수행
start = 1 # 가능한 최소 거리(min gap)
end = array[-1] - array[0] # 가능한 최대 거리(max gap)
result = 0
while(start <= end):
mid = (start + end) // 2 # mid는 가장 인접한 두 공유기 사이의 거리(gap)을 의미
# 첫째 집에는 무조건 공유기를 설치한다고 가정
value = array[0]
count = 1
# 현재의 mid 값을 이용해 공유기를 설치하기
for i in range(1, n): # 앞에서부터 차근차근 설치
if array[i] >= value + mid:
value = array[i]
count += 1
if count >= c: # C개 이상의 공유기를 설치할 수 있는 경우, 거리를 증가시키기
start = mid + 1
result = mid # 최적의 결과를 저장
else: # C개 이상의 공유기를 설치할 수 없는 경우, 거리를 감소시키기
end = mid - 1
print(result)