알고리즘/백준

백준 18258

남승현 2023. 10. 18. 16:07
  • 리스트를 이용해서 큐를 구현하려고 했으나 시간 초과 오류가 발생했다.

-> 리스트로 선언해서 pop(0)를 하게 되면, 첫 번째 요소를 pop 하고나서 나머지 요소들의 인덱스를 1칸씩 당기는 과정에서 O(n)의 계산량이 발생해서

-> deque을 사용하는 게 좋다고 한다 ( deque는 앞,뒤에서 데이터 처리할 수 있는 양방향 자료형이라서)

양방향이기에 스택으로 써도 되고 큐처럼 써도 된다고 한다.

 

참고로 deque 사용하려면 모듈 import 해야함 + deque에서 맨 앞의 요소 출력하는 함수: .popleft()

 

*요약 :리스트에서 맨 앞의 원소를 반복적으로 출력할 일 있으면 큐보다 덱 쓰는 게 좋다!

import sys
from collections import deque

n=int(input())
q=deque()
for _ in range(n):
    a=sys.stdin.readline().split()
    if a[0]=='push':
        q.append(a[1])
    elif a[0]=='pop':
        if q:
            print(q.popleft())
        else:
            print(-1)
    elif a[0]=='size':
        print(len(q))
    elif a[0]=='empty':
        if not q:
            print(1)
        else:
            print(0)
    elif a[0]=='front':
        if q:
            print(q[0])
        else:
            print(-1)
    elif a[0]=='back':
        if q:
            print(q[-1])
        else:
            print(-1)

 

cf) deq.appendleft() : 원소를 맨앞에 집어넣음