알고리즘

[프로그래머스, 파이썬] 택배상자

hminor 2024. 3. 14. 12:04

풀이

  • 해당 문제는 택배를 메인 컨테이너와 서브 컨테이너에 배치하면서
  • 요청 대로 알맞은 순서에 맞게 쌓아져 갈 수 있는 택배의 개수를 세는 문제로
  • 서브 컨테이너는 추가한 순서의 역순으로 빼낼 수 있는 후입선출이기에 
  • deque를 사용하면 좋을 것 같다고 생각하여 아래와 같이 작성 후 해결
  • 여기서 시간 초과가 한 번 발생했는데 이유는
  • i와 order[0]이 같을 경우 order[0]을 del 시켜 제거하도록 했어서
  • 해결하기 위해 idx 변수로 적용하여 해결하도록 했음.

 

from collections import deque

def solution(order):
    main = []
    sub = deque([])
    idx = 0
    for i in range(1,len(order)+1):
        if i != order[idx]:
            sub.appendleft(i)
        else:
            main.append(i)
            idx += 1
            while sub and sub[0] == order[idx]:
                idx += 1
                main.append(sub.popleft())
    return len(main)