728x90
문제
정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 여섯 가지이다.
- push X: 정수 X를 큐에 넣는 연산이다.
- pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 큐에 들어있는 정수의 개수를 출력한다.
- empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
- front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
입력
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
출력
출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
풀이
큐 (Queue)
First In First Out
파이썬으로 큐를 구현하는 방법은 크게 3가지가 있다.
1. list 사용하기
q=[]
q.append() # push (큐에 넣는 연산)
q.pop(0) # pop (가장 앞에 있는 정수를 빼기)
2. collection.dequeu
deque는 파이썬의 자료구조의 일종이다. list와 비슷하게 동작하지만, 연산 복잡도에 있어 deque가 더 빠르게 동작하도록 설계되어 있다고 한다.
from collections import deque
q=deque()
q.append() # push (큐에 넣는 연산)
q.popleft() # pop (가장 앞에 있는 정수를 빼기)
3. queue.Queue
queue는 멀티 스레드를 위해 만들어진 라이브러리이다. 따라서 deque에 비해 많이 느리다.
from queue import Queue
q=Queue()
q.put() # push (큐에 넣는 연산)
q.get() # pop (가장 앞에 있는 정수를 빼기)
q.empty() # empty (큐가 비어있으면 True, 아니면 False)
q.qsize() # size (큐의 길이)
따라서 조금 더 빠른 collections.deque을 사용하고,
내장함수 input() 대신 조금 더 빠른 sys.stdin을 사용하여 사용자 입력값을 읽어오게 작성했다.
답안 코드
import sys
from collections import deque
def func1(cmd, queue):
if "push" in cmd:
queue.append(cmd[5:])
elif cmd =="pop":
if queue:
print(queue.popleft())
else:
print(-1)
elif cmd =="size":
print(len(queue))
elif cmd =="empty":
if queue:
print(0)
else:
print(1)
elif cmd =="front":
if queue:
print(queue[0])
else:
print(-1)
elif cmd =="back":
if queue:
print(queue[-1])
else:
print(-1)
queue=deque()
N = int(sys.stdin.readline().rstrip())
for _ in range(N):
cmd = sys.stdin.readline().rstrip()
func1(cmd,queue)
결론
코테에서 Queue를 구현할 때 collections.deque를 쓰자!
[참고]
728x90
반응형
'Algorithm' 카테고리의 다른 글
[백준] 2003번: 수들의 합 2 -파이썬 (0) | 2022.01.13 |
---|---|
[백준] 1697번: 숨바꼭질 -파이썬 (0) | 2022.01.13 |
[백준] 14226번: 이모티콘 - 파이썬 (0) | 2022.01.10 |
[프로그래머스] 로또의 최고 순위와 최저 순위 (0) | 2021.11.23 |
[백준] 2630번: 색종이 만들기 (재귀) (0) | 2021.02.24 |