- 오늘의 계획
- 프로그래머스/백준 사이트에서 알고리즘 문제 풀이(이분 탐색)
-
오늘의 회고
- 이분 탐색 문제 풀이 : 징검다리(프로그래머스 LEVEL 4)
- 처음에 정렬한 다음 각 거리 별로 비교하려고 하였는데 이분 탐색 방법으로 변경하였다.
- left, mid, right로 나누어 mid가 바위 사이의 거리보다 큰 경우에만 count값을 증가시켜 count값이 n보다 작거나 같다면(문제 조건에서는 n이지만 n으로 제출했을 때 통과가 안돼서 찾아보니 이하로 하면 된다고 했다.) 우측에서 찾아야 하므로 left를 mid + 1로 변경하고 answer와 mid 중 큰 값으로 answer로 설정하였다.
- count값이 n보다 크다면 좌측에서 찾아야 하므로 right를 mid - 1로 변경한다.
-
코드 :
```python def solution(distance, rocks, n): answer = 0 rocks.sort() left = 1 right = distance mid = 0 while left <= right: mid = (left + right) // 2 prev = 0 count = 0 for rock in rocks: if mid > rock - prev: count += 1 else: prev = rock if distance - prev < mid: count += 1 if count <= n: left = mid + 1 answer = max(answer, mid) else: right = mid - 1 return answer ```
- 이분 탐색 문제 풀이 : 징검다리(프로그래머스 LEVEL 4)