728x90
https://www.acmicpc.net/problem/2110
공유기 사이의 거리를 mid 값으로 준 후에
산출된 공유기의 갯수에 따라 start 나 end의 값을 증가시키거나 감소시키며 이분탐색한다.
목표 공유기 갯수인 c개보다 같거나 많이 설치했을때 가장 인접한 공유기 사이의 거리가 최대가 되도록 하면된다.
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
31
32
33
34
35
36
37
38
|
import sys
input = sys.stdin.readline
n, c = map(int, input().split())
li = []
for _ in range(n):
li.append(int(input()))
# 이분탐색을 위한 정렬
li = sorted(li)
def bi_search(m):
cnt = 1
wifi = li[0]
for i in range(1, n):
# m 이상 떨어져야함.
if m <= li[i] - wifi:
cnt += 1
wifi = li[i]
return cnt
answer = 0
start, end = 1, li[-1] - li[0]
while start <= end:
mid = (end + start) // 2
result = bi_search(mid)
if result >= c:
answer = mid
start = mid + 1
else:
end = mid - 1
print(answer)
|
cs |
728x90
'PS > 백준' 카테고리의 다른 글
[백준 12015번] 가장 긴 증가하는 부분 수열 2 (파이썬/python) (0) | 2021.06.16 |
---|---|
[백준 12865번] 평범한 배낭 (파이썬/python) (0) | 2021.06.16 |
[백준 11279번] 최대 힙 (파이썬/python) (0) | 2021.06.15 |
[백준 2606번] 바이러스 (파이썬/python) (0) | 2021.06.15 |
[백준 11399번] ATM (파이썬/python) (0) | 2021.06.15 |