본문 바로가기

알고리즘

백준) 18258 Python (큐 Queue)

문제 링크 :  https://www.acmicpc.net/problem/18258

 

18258번: 큐 2

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 2,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

deque 라이브러리를 사용하지 않고 풀었을 때 시간초과가 떴으나 deque 라이브러리의 append와 popleft 를 사용했고 문제를 해결할 수 있었다.

 

deque란 파이썬의 collections module 에서 사용할 수 있으며, 스택과 큐 두가지를 일반화 한 것이다. 따라서 두가지의 역할을 모두 수행할 수 있고 양방향에서 element를 추가하고 제거할 수 있다.

여기서 성능은 추가와 제거를 O(1) 으로 지원한다.

 

 

아래는 제출 코드이다.

from collections import deque
import sys

n = int(sys.stdin.readline())
queue = deque()

for i in range(n):
    command = sys.stdin.readline().split()

    if command[0] == "push":
        queue.append(command[1])

    if command[0] == "pop":
        if len(queue):
            print(queue.popleft())
        else:
            print(-1)

    if command[0] == "size":
        print(len(queue))

    if command[0] == "empty":
        if len(queue):
            print(0)
        else:
            print(1)

    if command[0] == "front":
        if len(queue):
            print(queue[0])
        else:
            print(-1)

    if command[0] == "back":
        if len(queue):
            print(queue[-1])
        else:
            print(-1)


# 앞자리 => 나누기로 구하기
# 뒷자리 => 나머지로 구하기

런타임 에러를 방지하기 위해 sys 라이브러리 또한 사용했다.