[프로그래머스] 징검다리 건너기 복기

김지민·2022년 4월 27일
0

문제

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
  • break문은 for문을 끝내고 밑에 코드를 읽는다. continue가 아님을 명심하자.
  • 나는 0의 갯수가 k개 일 때, 더 이상 징검다리를 건널 수 없다고 판단하였다. 하지만 cnt를 증가 하자마자 k개 인지 확인하였다. 그러면 mid명이 뛸 수 있다는 것을 의미한다. 각각 수의 의미를 잘 확인해야한다.
profile
💡Habit is a second nature. [Git] https://github.com/Kimjimin97

0개의 댓글

관련 채용 정보