문제
https://programmers.co.kr/learn/courses/30/lessons/43236?language=python3
코딩테스트 연습 - 징검다리
출발지점부터 distance만큼 떨어진 곳에 도착지점이 있습니다. 그리고 그사이에는 바위들이 놓여있습니다. 바위 중 몇 개를 제거하려고 합니다. 예를 들어, 도착지점이 25만큼 떨어져 있고, 바위가
programmers.co.kr
코드
def solution(distance, rocks, n):
start,end=0,distance
answer=0
rocks.sort()
while start<=end:
mid=(start+end)//2
del_stone = 0
pre_stone = 0
for rock in rocks:
if rock-pre_stone < mid:
del_stone+=1
else:
pre_stone=rock
if del_stone<=n:
answer=mid
start=mid+1
else:
end=mid-1
return answer
def solution(distance, rocks, n):
start=0
end=distance
# 마지막과 마지막 이전까지의 거리도 구해야 하므로
rocks.append(distance)
rocks.sort()
while start<=end:
mid=(start+end)//2
count=0
pre_stone=0
for rock in rocks:
# 중앙값보다 두개의 돌 사이가 더 작으면 삭제
if rock-pre_stone<mid:
count+=1
# 더 큰 경우는 이전 돌을 현재 돌 위치로 갱신
else:
pre_stone=rock
# n보다 삭제한 돌이 작은 경우, 거리를 더 늘려 주어야 하므로 start 증가
if count<=n:
start=mid+1
answer=mid
else:
end=mid-1
return answer
생각 정리
둘 사이의 거리를 기준으로 작으면 제거하고 크면 두는 방식을 사용했다.
'문제풀이 > 이진탐색' 카테고리의 다른 글
@[파이썬] [이진탐색] 백준 2512 예산 (0) | 2022.12.21 |
---|---|
[파이썬] [이진탐색] 백준 1300 K번째 수 (0) | 2022.03.02 |
* [파이썬] [이진탐색] 백준 8983 사냥꾼 (0) | 2022.01.23 |
[파이썬] [이진탐색] 백준 2343 기타레슨 (0) | 2022.01.22 |
[파이썬] [이진탐색] 백준 7795 먹을 것인가 (0) | 2022.01.22 |