Written by
최태열
on
on
[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