문제 설명
다음 내용의 스택(Stack)에 적용되는 쿼리 정보가 매개변수 queries로 주어질 때, 쿼리 수행 결과를 반환하는 solution 함수를 작성하시오.
쿼리 정보
"push x"(x는 자연수)- 자연수
x를 스택에 삽입합니다. - 쿼리 수행 결과에는 아무 변화가 없습니다.
- 자연수
"pop"- 스택에 제일 마지막으로 삽입된 수를 쿼리 수행 결과에 추가하고 해당 숫자를 스택에서 삭제합니다.
- 만일 스택이 비어있다면 쿼리 수행 결과에는
0을 추가합니다.
개념 설명
스택은 First-In-Last-Out(FILO) 구조를 따릅니다. 대표적으로 스택에는 다음 두 가지 쿼리가 적용됩니다.
push X (삽입): 스택에 객체 X를 삽입합니다.pop (삭제): 스택에 삽입된 객체 중 가장 마지막에 삽입된 객체를 추출합니다.
그 외에도 다음과 같은 다양한 쿼리가 적용되기도 합니다.
top/peek: 스택에 삽입된 객체 중 가장 마지막에 삽입된 객체를 확인합니다. (pop과 달리 삭제하지 않습니다)empty: 현재 스택이 비어있는지 여부를 반환합니다.size/len: 현재 스택에 있는 객체의 개수를 반환합니다.
스택에 다음과 같은 순서대로 쿼리가 적용된다고 가정합니다.
(push 4), (push 10), (push 7), (pop), (pop), (push 5), (pop), (push 15), (pop)
이때 스택의 동작 과정은 다음과 같습니다.

일반적으로 스택은 리스트로 구현됩니다.
- 삽입(push) 쿼리는 리스트의 가장 마지막에 새로운 객체를 삽입합니다.
- 삭제(pop) 쿼리는 리스트의 가장 마지막에 있는 객체를 추출합니다.
리스트로 구현한 스택은 삽입, 삭제 쿼리 모두 의 시간복잡도를 가집니다.
제한 사항
queries의 모든 원소는 0 이상 10,000 이하의 정수만 주어집니다.queries의 길이는 100,000 이하입니다.queries에는 0이 항상 1번 이상 포함되어 있습니다.
예시 테스트케이스 설명
| 테스트케이스 번호 | queries | return |
|---|---|---|
| 1 | ["push 4","push 10","push 7","pop","pop","push 5","pop","push 15","pop"] | [7,10,5,15] |
| 2 | ["push 5","push 5","push 5","pop","push 3","pop","pop"] | [5,3,5] |
| 3 | ["pop","push 1","pop","pop"] | [0,1,0] |
1번 테스트케이스 설명
- 위에서 제시된 예시와 동일합니다.
2번 테스트케이스 설명
-
아래와 같은 과정으로 쿼리가 동작합니다.
쿼리 스택 결과 push 5 [5] [] push 5 [5,5] [] push 5 [5,5,5] [] pop [5,5] [5] push 3 [5,5,3] [5] pop [5,5] [5,3] pop [5] [5,3,5]
3번 테스트케이스 설명
-
아래와 같은 과정으로 쿼리가 동작합니다. 비어있는 큐에서 pop 쿼리는 0을 결과로 반환합니다.
쿼리 스택 결과 pop [] [0] push 1 [1] [0] pop [] [0,1] pop [] [0,1,0]