알고리즘
백준) 18258 Python (큐 Queue)
Miaaaa
2023. 5. 24. 17:07
문제 링크 : 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 라이브러리 또한 사용했다.