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

 

10845번: 큐

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

www.acmicpc.net

 

풀이 과정

스택은 파이썬에서 list로 구현할 수 있었지만 Queue는 list로 구현해서는 안된다. 0번째 원소를 insert, pop 하는 연산의 시간복잡도가 O(N)이기 때문에 절대 list로 큐를 구현해서는 안된다. collection 모듈에서 양 방향 큐인 deque를 사용해 큐를 구현해야 한다.

 

큐의 왼쪽으로 수가 들어와 오른쪽으로 나가게 구현하였고, push시 appendleft(), pop시 pop()을 사용하였다.

 

코드

import sys
from collections import deque

N = int(input())
queue = deque()

for i in range(N):
    instruction = sys.stdin.readline().split()
    if instruction[0] == 'push': queue.appendleft(instruction[1])
    elif instruction[0] == 'pop': print(queue.pop() if queue else -1)
    elif instruction[0] == 'size': print(len(queue))
    elif instruction[0] == 'empty': print(0 if queue else 1)
    elif instruction[0] == 'front': print(queue[-1] if queue else -1)
    elif instruction[0] == 'back': print(queue[0] if queue else -1)

+ Recent posts