
문제 출처 : https://www.acmicpc.net/problem/10845
난이도 : 실버 4
어제 푼 백준 10828번: 스택 [Python] 문제와 스택이냐 큐이냐 자료구조 차이만 존재한다.
문제의 요구사항에 맞춰
push, pop, size, empty, front, back 여섯가지의 간단한 기능들을 구현하면 된다.
파이썬에는 deque이라는 큐를 구현해주는 라이브러리가 있어서 큐를 유용하게 구현할 수 있다.
import sys
input = sys.stdin.readline
from collections import deque
N = int(input())
queue = deque()
out = []
for _ in range(N):
cmd = input().split()
if cmd[0] == "push":
queue.append(int(cmd[1]))
elif cmd[0] == "pop":
if queue:
out.append(str(queue.popleft()))
else:
out.append("-1")
elif cmd[0] == "size":
out.append(str(len(queue)))
elif cmd[0] == "empty":
out.append("1" if not queue else "0")
elif cmd[0] == "front":
if queue:
out.append(str(queue[0]))
else:
out.append("-1")
elif cmd[0] == "back":
if queue:
out.append(str(queue[-1]))
else:
out.append("-1")
print("\n".join(out))
이 문제에선 deque.popleft만 사용되었지만 오랜만에 deque을 만나 다시 deque의 메소드들을 정리해둔다.
| 메소드 | 역할(한줄) | 예시 |
|---|---|---|
append(x) | 오른쪽(뒤)에 추가 | dq.append(3) |
appendleft(x) | 왼쪽(앞)에 추가 | dq.appendleft(3) |
pop() | 오른쪽(뒤)에서 제거 후 반환 | x = dq.pop() |
popleft() | 왼쪽(앞)에서 제거 후 반환 | x = dq.popleft() |
extend(iter) | 오른쪽에 여러 개 추가 | dq.extend([1,2,3]) |
extendleft(iter) | 왼쪽에 여러 개 추가(순서 주의) | dq.extendleft([1,2,3]) → 3,2,1,... |
rotate(k) | 회전(+)오른쪽 / (-)왼쪽 | dq.rotate(1) |
clear() | 전부 비우기 | dq.clear() |
len(dq) | 길이(함수) | len(dq) |
dq[i] | 인덱싱(가능) | dq[0] |
remove(x) | 값 x 첫 번째 1개 삭제 | dq.remove(5) |
count(x) | 값 x 개수 세기 | dq.count(5) |