본문 바로가기

알고리즘

프로그래머스)택배상자

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

from collections import deque

def solution(order):
    answer = 0
    stack = []
    arr = [i for i in range(1,len(order) + 1)]
    arr = deque(arr)
    stack = deque(stack)
    order = deque(order)
    
    while arr:
        num = arr.popleft()
        if num == order[0]:
            order.popleft()
            answer += 1
        else:
            stack.append(num)
            
        if order and stack and stack[-1] == order[0]:
            stack.pop()
            order.popleft()
            answer+=1
            
        
    while order and stack and stack[-1] == order[0]:
        answer += 1
        order.popleft()
        stack.pop()
    return answer

역시나 굉장히 불친절한 문제였다.

 

문제 이해만 5분이 넘게 걸렸다.

 

문제는 택배를 먼저 넣어야 할 순서가 담긴 리스트 order에 순서에 맞게

1부터 len(order) + 1 까지 (order가 [4,1,2,3,5]라면 [1,2,3,4,5] 순서의 택배를 4번, 1번 2번 3번 5번 순서대로 넣어야 한다) 순서대로 넣어야 한다.

전형적인 스택 문제이고 스택을 이용해 풀었다.