[프로그래머스 | Python] 택배상자

게으른 완벽주의자·2023년 1월 27일
0

프로그래머스

목록 보기
20/83
post-custom-banner

프로그래머스_택배상자

'보조 컨테이너 벨트는 앞 뒤로 이동이 가능하지만 입구 외에 다른 면이 막혀 있어서 맨 앞의 상자만 뺄 수 있습니다' 라는 문제를 봤을 때 스택을 쓰는 걸 떠올렸다

근데 스택을 어떻게 써야할지 알고리즘을 못 짜서 다른 분의 코드를 참고했다ㅠ_ㅠ

답안 코드1

def solution(order):
    tmp = []
    n = len(order)
    i = 1
    idx = 0
    
    while i < n+1:
        tmp.append(i)
        while tmp[-1]==order[idx]:
            idx+=1
            tmp.pop()
            if len(tmp)==0:
                break
        i += 1
        
    return idx

사실 위의 답안이 이해하기 어려워서 다른 답안들을 더 찾아보다가, [더 이해하기 쉬운 답안](https://velog.io/@whitesummer/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-Lv.2-%ED%83%9D%EB%B0%B0%EC%83%81%EC%9E%90)을 발견했다.

답안 코드2

def solution(order):
    tmp = []    #보조 컨테이너
    n = len(order)
    start = 1
    answer = 0
    
    for i in range(n):
        #보조 컨테이너에 있는 경우
        if order[i] in tmp:
            #가장 마지막에 실은 상자가, 현재 순서인 경우
            if tmp[-1]==order[i]:
                tmp.pop()
                answer += 1
            #가장 마지막에 싣지 않은 경우
            else:
                break
        
        #보조 컨테이너에 없는 경우
        else:
            #처음부터 현재 순서 전까지 모두 보조 컨테이너에 싣기
            for j in range(start, order[i]):
                tmp.append(j)
                
            start = order[i]+1  #다음 순서 업데이트
            answer += 1 #현재 순서의 박스를 트럭에 실었으므로, +1
                
        
    return answer
profile
데이터를 공부하고 있습니다
post-custom-banner

0개의 댓글