문제링크:https://www.acmicpc.net/problem/2110
import sys
N, C = map(int, sys.stdin.readline().split())
home = []
for _ in range(N):
home.append(int(sys.stdin.readline()))
home.sort() # 이분 탐색을 위해 정렬
start = 0
end = home[-1]
ans = 0
def binary(arr, s, e):
while s <= e: # start != end 까지 반복
m = (s + e) // 2
current = arr[0]
count = 1
for i in range(len(arr)):
if arr[i] >= current + m: # arr[i]보다 작거나 같으면 count +=1 공유기를 arr[i]에 설치
count += 1
current = arr[i]
if count >= C: # C를 넘어가면 더 넓게 설치할수있다는 말 => s = m+1
global ans
ans = m # 설치 범위 저장
s = m + 1
else: # C를 넘어가지 않는다면 더 좁게 설치해야함으로 e = m - 1 설정하기
e = m - 1
binary(home, start, end)
print(ans)
'Algorithm > 백준(파이썬)' 카테고리의 다른 글
백준 8983 파이썬(Python) 문제풀이 사냥꾼 (0) | 2023.04.16 |
---|---|
백준 2470 파이썬(Python) 문제풀이 두 용액 (0) | 2023.04.15 |
백준 10971 파이썬(Python) 문제풀이 외판원순회 2 (0) | 2023.04.13 |
백준 10819 파이썬(Python) 문제풀이 차이를 최대로 (0) | 2023.04.12 |
백준 1074 파이썬(Python) 문제풀이 Z (0) | 2023.04.12 |