bong-u/til

프로그래머스 - 택배상자 (L2)

수정일 : 2023-08-04

 1def solution(order):
 2    answer = 0
 3    length = len(order)
 4    stackA = [i for i in range(length, 0, -1)]
 5    stackB = []
 6    
 7    for i in order:
 8        while True:
 9            if stackA and stackA[-1] == i:
10                stackA.pop()
11                break
12            if stackB and stackB[-1] == i:
13                stackB.pop()
14                break
15
16            if stackB and stackB[-1] > i:
17                return answer
18            
19            stackB.append(stackA.pop())
20        answer += 1
21        
22    return answer

문제

  • 원하는 상자 순서를 나타내는 정수배열 order가 주어진다
  • 컨베이어 벨트에 [N… 3, 2, 1]와 같이 박스가 놓여있다
  • 박스는 1번 상자부터 순차적으로 뺄 수 있다
  • 뺀 상자를 잠깐 보조 컨베이어 벨트에 보관할 수 있다
  • 보조 컨베이어 벨트는 스택과 같이 FILO가 적용된다
  • 순서대로 상자를 싣지 못하면, 그만둔다
  • 박스를 order에 맞게 몇 개까지 실을 수 있는지 구하라
  • TC
    • input

      [4, 3, 1, 2, 5]

    • ouput

      2

해결방법

  • 직관적으로 stackA, stackB를 선언하였다
  • stackA가 주 컨베이어 벨트, stackB가 보조 컨베이어 벨트 역할을 한다
  • order를 순회하면서 순서에 맞는 상자가 나올 때 까지, 보조 컨베이어 벨트로 보내기를 반복한다
  • 보조 컨베이어 벨트의 top이 꺼내야 할 요소보다 큰 경우,
  • 꺼낼 상자가 보조 컨베이어 뒤쪽에 있다는 의미이므로 반복문을 빠져나온다