프로그래머스, 징검다리건너기, 64062

2024. 9. 6. 00:39ETC/Algorithm

[유형]

이분탐색

 

[문제링크]

https://school.programmers.co.kr/learn/courses/30/lessons/64062

 

[요약]

디딤돌에 적힌 숫자가 순서대로 담긴 배열 stones 번에 건너뛸 있는 디딤돌의 최대 칸수 k 매개변수로 주어질 , 최대 명까지 징검다리를 건널 있는지 return 하도록 solution 함수를 완성해주세요.

 

[문제풀이]

mid : 징검다리를 건널 수 있는 최대 인원

cnt : 건너지 못하는 연속된 돌의 개수

stone <= mid : mid가 stone을 다 건너지 못하는 경우, 건너지 못하는 연속된 돌의 개수를 증가시킨다.

stone > mid : mid가 stone을 모두 건널 수 있으므로, 건너지 못하는 연속된 돌의 개수를 0으로 초기화한다.

cnt >= k :징검다리를 건널 수 있는 최대 인원을 줄여야 한다는 의미이고

cnt < k : 징검다리를 건널 수 있는 최대 인원을 늘려야 한다는 의미이다.

def solution(stones, k):
    start, end = 1, max(stones)
    while start <= end:
        cnt = 0
        mid = (start+end)//2
        for stone in stones:
            if stone <= mid:
                cnt+=1
                if cnt >= k:
                    break
            else:
                cnt = 0
        
        if cnt >= k:
            end = mid -1
        else:
            start = mid +1
        
    return start

'ETC > Algorithm' 카테고리의 다른 글

백준, 숫자카드, 10815  (0) 2024.09.06
백준, 1789, 수들의 합  (0) 2024.09.06
백준, K번째 수, 1300, 파이썬  (0) 2024.09.05
백준, 공유기 설치, 2110, 파이썬  (0) 2024.09.04
백준, 랜선 자르기 ,1654,파이썬  (0) 2024.09.04