[Python][프로그래머스][Level4] 징검다리

[Python][프로그래머스][Level4] 징검다리

코드

def solution(distance, rocks, n):
    rocks=[0]+sorted(rocks)+[distance]
    rocks=[rocks[i+1]-rocks[i] for i in range(len(rocks)-1)]
    
    start=0
    end=distance
    
    while start<=end:
        middle=(start+end)//2
        cnt=0
        new_rocks=rocks[::]
        for idx in range(len(new_rocks)-1):
            if new_rocks[idx]<middle:
                new_rocks[idx+1]+=new_rocks[idx]
                cnt+=1
        else:
            if new_rocks[-1]<middle:
                cnt+=1
        
        if cnt>n:
            end=middle-1
        else:
            start=middle+1
    
    return end

이분탐색을 활용해 풀었다.

거리의 최솟값을 미리 설정해두고 그 값보다 작은 바위 사이의 거리일 경우

그 바위를 없애고 다음 바위의 거리를 업데이트한다.

없앤 바위가 n 보다 크다면

불가능한 최소거리이므로 end = middle-1

n보다 같거나 작다면 가능한 거리이기 때문에 start = middle + 1 로 바꾼다.

cnt=n 이면서 가장 큰 값이기 때문에 end를 반환한다.

Discussion and feedback