백준 2110 [python]

김석·2022년 1월 31일
0

백준

목록 보기
3/13

https://www.acmicpc.net/problem/2110

import sys

def binary_search(start, end):
    global res
    if start > end:
        return
    mid = (start + end) // 2
    
    cnt = 0
    temp = 0
    for i in range(1, n):
        temp += x[i] - x[i - 1]
        if temp >= mid:
            cnt += 1
            temp = 0
    
    if cnt < c - 1:
        binary_search(start, mid - 1)
    else:
        res = mid
        binary_search(mid + 1, end)
    
n, c = map(int, input().split())
x = []
for i in range(n):
    x.append(int(sys.stdin.readline()))
x.sort()

res = 0
start = 1
end = (x[-1] - x[0]) // (c - 1)

binary_search(1, end)
print(res)

풀이 방법이 바로 생각이 나지 않았다. 처음에는 집 좌표 리스트를 어떻게 이분 탐색해보려고 했다. 앞으로 이런 문제를 만났을 때 알고리즘을 어떤 부분에 왜 적용시켜야 하는지 계속 생각하면서 똑똑하게 풀 수 있게 노력해야겠다.

공유기는 최선을 다해 널찍히 떨어뜨러야 하고, 그 상태에서 가장 짧은 거리를 구해야 한다. 사고과정의 핵심은 한 길이를 가장 넓게 퍼뜨린 공유기들 중 가장 작은 거리라고 가정하고 검사하는 것이라고 생각한다.

profile
handsome

0개의 댓글

관련 채용 정보