https://programmers.co.kr/learn/courses/30/lessons/64062
def solution(stones, k):
if len(stones) == 1:
return stones[0]
s = 1
e = max(stones)
while s < e:
m = (s + e) // 2
if possible(stones, k, m):
s = m + 1
else:
e = m
return s
def possible(stones, k, m):
max_count = 0
count = 0
for i in range(len(stones)-1):
if stones[i] - m <= 0:
count += 1
if stones[i+1] - m > 0:
max_count = max(max_count, count)
count = 0
i += 1
if stones[i] - m <= 0:
count += 1
max_count = max(max_count, count)
if max_count >= k:
return False
return True