알고리즘 & 코딩테스트

[백준] 18258번 큐 2

Haksae 2022. 3. 7. 17:47

 

⛏ 문제 파악

  • 큐(queue)를 직접 간단하게 구현해보는 문제
  • 큰 어려움은 없지만 제한 시간이 짧다.

👉🏻  답안

import sys
from collections import deque

K = int(sys.stdin.readline())

queue = deque([])
for _ in range(K):
  x = sys.stdin.readline().split()

  if x[0] == 'push':
    queue.append(x[1])

  elif x[0] == 'pop':
    if len(queue) != 0:
      print(queue.popleft())
    else:
      print(-1)

  elif x[0] == 'size':
    print(len(queue))

  elif x[0] == 'empty':
    if len(queue) == 0:
      print(1)
    else:
      print(0)

  elif x[0] == 'front':
    if len(queue) != 0:
      print(queue[0])
    else:
      print(-1)

  elif x[0] == 'back':
    if len(queue) != 0:
      print(queue[len(queue)-1])
    else:
      print(-1)

📑  간단한 설명

  • 배열의 [0] 인덱스의 값을 제거하기위해, 일반적으로 사용하는 pop(0) 이나 del을 사용하면 시간초과가 난다.
  • 왜냐하면 이 두 함수는 배열을 제거하고 모든 배열을 이동시켜야하기 때문에 시간 복잡도가 O(N)이기 때문이다.
  • 그래서 collections 모듈의 deque(double-ended queue)를 사용했다.
  • 큐는 선입선출 방식이지만, deque은 양방향에서 삽입과 삭제가 가능하기에, deque의 시간 복잡도는 O(1)이 된다.
  • 즉 시간을 효율적으로 사용할 수 있다.