백준 18258번 큐 2 - python

tomkitcount·2025년 4월 4일

매일 알고리즘

목록 보기
15/298

https://www.acmicpc.net/problem/18258

큐에 개념에 대해 알아보는 문제

import sys
n = int(input())
queue = []
for i in range(n):
    com = sys.stdin.readline().split()
    if com[0] == 'push':
        queue.append(com[1])
    elif com[0] == 'pop':
        if len(queue) == 0:
            print(-1)
        else:
            print(queue.pop(0))  
    elif com[0] == 'size':
        print(len(queue))
    elif com[0] == 'empty':
        if len(queue) == 0:
            print(1)
        else:
            print(0)
    elif com[0] == 'front':
        if len(queue) == 0:
            print(-1)
        else:
            print(queue[0])
    elif com[0] == 'back':
        if len(queue) == 0:
            print(-1)
        else:
            print(queue[-1])

리스트를 활용하여 풀었지만 시간 초과가 났다.
찾아보니 deque을 활용하여 푼 사례들이 있었다. 이참에 deque에 대해 공부하고 정리해보았다.
deque 정리본

import sys
from collections import deque

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

deque의 popleft() 등의 함수를 활용하여 풀면 시간초과가 나지않는다.
deque의 시간 복잡도는 O(1)

profile
To make it count

0개의 댓글