1. 문제
https://programmers.co.kr/learn/courses/30/lessons/43236
코딩테스트 연습 - 징검다리
출발지점부터 distance만큼 떨어진 곳에 도착지점이 있습니다. 그리고 그사이에는 바위들이 놓여있습니다. 바위 중 몇 개를 제거하려고 합니다. 예를 들어, 도착지점이 25만큼 떨어져 있고, 바위가
programmers.co.kr
2. 접근 방법
전 문제(입국심사)를 풀면서 거리를 기준으로 이분탐색을 하면 되겠다는 생각을 했습니다.
그래서 거리를 기준으로 제거되는 바위의 갯수를 세고, 해당 바위의 갯수가 n개보다 많을 때에는 기준 거리를 줄이고, n개보다 적을 때에는 기준거리를 늘리고, n개일 때 return하게 짰습니다.
근데 요러케 하면 ^^ 왜인지는 모르겠지만 엄청나게 틀리더라구여
그래서 질문하기를 봤더니 다들 문제에 오류가 있는 것 같다며 n개가 아닌 n개 이하에 대해 고려하도록 코드를 수정하라고 되어 있어서 n개보다 적을 때에 answer를 갱신(answer와 mid 중 큰 값으로 갱신)하도록 수정했습니다.
3. 코드
Python
def solution(distance, rocks, n):
answer = 0
left = 0
right = distance
rocks.sort()
def check(val):
start = 0
delete_cnt = 0
for i in range(len(rocks)):
rock = rocks[i]
if abs(start - rock) < val:
delete_cnt += 1
elif abs(start - rock) >= val:
start = rock
return delete_cnt
while left <= right:
mid = (left + right) // 2
delete_cnt = check(mid)
if delete_cnt > n:
right = mid - 1
else:
left = mid + 1
answer = max(answer, mid)
return answer
4. 마치며
이분탐색을 몇 개 더 풀어봐야겠슴다
'Algorithm > Python' 카테고리의 다른 글
[백준 1389] 케빈 베이컨의 6단계 법칙 (0) | 2021.09.05 |
---|---|
[위클리 챌린지-3주차] 퍼즐 조각 채우기 (0) | 2021.08.23 |
[python] 43238 입국심사 (0) | 2021.08.22 |
[백준 10845] 큐 (0) | 2021.08.16 |
[python] 17686 파일명 정렬 - 카카오 2018 3차 (0) | 2021.07.06 |