문제
요약
- n번 밟을 수 있는 디딤돌들이 늘어선 징검다리가 있다.
- 니니즈 친구들은 k개 이하의 거리를 뛸 수 있다.
- 밟을 수 있는 디딤돌 중, 항상 가장 가까운 디딤돌로 뛰어야 한다.
- 몇 명의 친구들이 건널 수 있는지 구하라.
분류
- 이진탐색
풀이
1. 내 풀이
- 건널 수 있는 친구 수, 즉 result를 기준으로 생각하자.
- result의 범위는 min(stones) ~ max(stones) 이다.
- 적절한 result의 값을 이진탐색한다. result보다 작은 stone의 값이 k개 이상 있으면 right 을 갱신, k개 이하 있으면 left 를 갱신하자.
def solution(stones, k):
left, right = min(stones), max(stones)
answer = 0
while left <= right:
mid = (left + right) // 2 #예비 result
skip = 0
for i in range(len(stones)):
if stones[i] < mid:
skip += 1
if skip >= k:
right = mid - 1
break
else:
skip = 0
if right != mid - 1:
left = mid + 1
answer = max(answer, mid)
return answer