[Programmers] 징검다리 건너기 파이썬 풀이

Updated:

문제링크

2019 카카오 개발자 겨울 인턴십 > 징검다리 건너기

문제 풀이

  • 친구들은 디딤돌을 하나씩 건너다가 0을 만나면 그 다음 디딤돌로 점프해서 넘어간다
  • 점프는 최대 k 거리 만큼 뛸수 있다.
  • stones 배열 각 원소는 1 ~ 200,000,000 이하 이다. 따라서 다리를 건널 수 있는 최대 친구수 또한 1 ~ 200,000,000명 이다.
  • 이진 탐색을 사용하여 징검다리를 건널 수 있는 최대 인원 수를 mid로 가정하고 검증한다
  • 검증은 점프가 k 이하로 가능하면 mid 가 작은 경우이고 k 이상이면 건너지 못하기 때문에 mid를 크게 가정한 경우이다.

Python3 코드

def solution(stones, k):
    left = 1
    right = 200000000
    
    while left <= right:
        mid = (left + right) // 2
        cnt = 0
        tmp = stones.copy()
        
        for t in tmp:
            if t - mid <= 0:
                cnt += 1
            else:
                cnt = 0
            
            if cnt >= k:
                break
        
        if cnt >= k:
            right = mid - 1
        else:
            left = mid + 1
            
    return left

Leave a comment