https://programmers.co.kr/learn/courses/30/lessons/64062
#최대 몇 명까지 징검다리를 건널 수 있는지
def solution(stones, k):
answer = 0
left = 0
right = 200000001
while left <= right:
mid = (left + right)//2
cnt = 0
flag = True
for x in stones:
if x - mid <= 0:
cnt += 1
if cnt == k: #해당 mid명까지 뛰었을 때, 다음 사람은 뛰지 못한다.
flag = False
right = mid - 1
answer = mid
break
else:
cnt = 0
if flag:
answer = max(answer,mid)
left = mid + 1
return answer
내가 잘 못하는 건 언제 끝낼지이다. 그리고 상태를 확인하는 타이밍을 잘못 잡는다.
def solution(stones, k):
answer = 0
left = 0
right = 200000001
while left <= right:
mid = (left + right)//2
cnt = 0
flag = True
for x in stones:
if x - mid <= 0:
cnt += 1
if cnt == k: # 뛰는 사람의 수를 줄여야 한다.
right = mid - 1
flag = False
break ## 여기 break가 걸려도 밑에 if문을 돌아야한다.
else:
cnt = 0
if flag:
left = mid + 1 # 뛰는 사람의 수를 늘려야함
return mid