학습
시험

[대표 유형] 큐

난이도
BEGINNER

문제 설명

다음 내용의 큐(Queue)에 적용되는 쿼리 정보가 매개변수 queries로 주어질 때, 쿼리 수행 결과를 반환하는 solution 함수를 작성하시오.

쿼리 정보

  • "push x" (x는 자연수)
    • 자연수 x를 큐에 삽입합니다.
    • 쿼리 수행 결과에는 아무 변화가 없습니다.
  • "pop"
    • 큐에 가장 처음으로 삽입된 수를 쿼리 수행 결과에 추가하고 해당 숫자를 큐에서 삭제합니다.
    • 만일 큐가 비어있다면 쿼리 수행 결과에는 0을 추가합니다.

개념 설명

큐는 First-In-First-Out(FIFO) 구조를 따릅니다. 대표적으로 큐에는 다음 두 가지 쿼리가 적용됩니다.

  1. push X (삽입) : 큐에 객체 X를 삽입합니다.
  2. pop (삭제) : 큐에 삽입된 객체 중 가장 처음에 삽입된 객체를 추출합니다.

그 외에도 다음과 같은 다양한 쿼리가 적용되기도 합니다.

  1. front/peek : 큐에 삽입된 객체 중 가장 처음에 삽입된 객체를 확인합니다. (pop과 달리 삭제하지 않습니다)
  2. empty : 현재 큐가 비어있는지 여부를 반환합니다.
  3. size/len : 현재 큐에 있는 객체의 개수를 반환합니다.

큐에 다음과 같은 순서대로 쿼리가 적용된다고 가정합니다.

(push 4), (push 10), (push 7), (pop), (pop), (push 5), (pop), (push 15), (pop)

이때 큐의 동작 과정은 다음과 같습니다.

일반적으로 큐는 원형 연결 리스트로 구현됩니다. 원형 연결 리스트에는 front와 back 포인터가 존재하여,

  • 삽입(push) 쿼리는 back(배열의 제일 뒷부분)에서 동작하고
  • 삭제(pop) 쿼리는 front(배열의 제일 첫부분)에서 동작합니다.

리스트로 구현한 큐는 삽입, 삭제 쿼리 모두 O(1)O(1)의 시간복잡도를 가집니다.


제한 사항

  • 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"] [4,10,7,5]
2 ["push 5","push 5","push 5","pop","push 3","pop","pop"] [5,5,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]