[プログラマー]橋を渡る

3500 ワード

渡る桥




コード#コード#

def solution(stones, k):
    lo = 1
    hi = max(stones)
    while lo < hi:
        mid = (lo + hi) // 2 # mid = 징검다리를 건너는 친구 수

        gap = 0 # 0의 개수
        for i in range(len(stones)):
            if stones[i] - mid <= 0: # 반복문으로 징검다리를 -1 하지 않고 
            # 친구수(mid)만큼 한번에 빼버린다.
                gap += 1
            else:
                gap = 0 # 0이 연속적인 경우에만 고려해야하기 때문에 0으로 초기화
            if gap >= k:
                break

        if gap >= k:
            hi = mid
        else:
            lo = mid + 1 # lower bound
    return lo
リファレンス

方法


この探索を通じて答えを探す.
ただし,答えがあらかじめ決まっているものと見なすべきである.
->すなわち、mid値を答えとして決定し、答え(mid)の順序を検証する