코딩하는 포메라니안 2021. 9. 4. 21:56

1. 문제

 

 

 

2. 풀이 과정

def solution(distance, rocks, n):
    if len(rocks) == n: #전체를 제거해야할 경우
        return distance
    
    gap = []
    rocks.sort()
    rocks.append(distance)
        
    def bsearch(s, e):
        while s <= e:
            m = (s+e)//2 #최솟값 중 최대가 m이라면
            #돌 몇 개를 빼야하는지 count
            c = 0
            prev = 0
            for rock in rocks:
                if rock - prev < m:
                    c += 1
                else:
                    prev = rock
                
            if c > n:
                e = m - 1
            else:
                s = m + 1
        return e
    
    return bsearch(1, distance)