정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 여섯 가지이다.
push X: 정수 X를 큐에 넣는 연산이다.
pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
size: 큐에 들어있는 정수의 개수를 출력한다.
empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
import sys
from sys import stdin
from collections import deque
queue=deque()
def push(x):
queue.append(x)
def pop():
if(len(queue) == 0):
print(-1)
else:
print(queue.popleft())
def size():
print(len(queue))
def empty():
if(len(queue) == 0):
print(1)
else:
print(0)
def front():
if (len(queue) == 0):
print(-1)
else:
print(queue[0])
def back():
if(len(queue) == 0):
print(-1)
else:
print(queue[-1])
n = int(stdin.readline())
for i in range(n):
k = stdin.readline().split()
if k[0] == 'push':
push(int(k[1]))
elif k[0] == 'pop':
pop()
elif k[0] == 'size':
size()
elif k[0] == 'empty':
empty()
elif k[0] == 'front':
front()
elif k[0] == 'back':
back()
deque
과 stdin.readline
을 이용해서 입력을 받는다. 참고 블로그deque
를 이용하면 popleft
같은 메서드도 사용할 수 있다. import sys
from collections import deque
def main():
sys.stdin=open(0,'rb')
token=iter(sys.stdin.read().split())
next(token)
dq = deque()
res=[]
for t in token:
if t==b'push':
dq.append(next(token))
elif t==b'pop':
res.append(dq.popleft() if dq else b'-1')
elif t==b'size':
res.append(str(len(dq)).encode())
elif t==b'empty':
res.append(b'0' if dq else b'1')
elif t==b'front':
res.append(dq[0] if dq else b'-1')
else:
res.append(dq[-1] if dq else b'-1')
sys.stdout.buffer.write(b'\n'.join(res))
main()
sys.stdin=open(0,'rb')
으로 바이너리 모드로 열어서 입력을 처리한다.token=iter(sys.stdin.read().split())
입력 데이터를 한 번에 읽어서 공백으로 분리하고 이터레이터로 변환한다.deque
를 이용하여 모든 결과를 바이너리 형식으로 처리한다.
- 바이너리 형식으로 풀면 최적화가 되긴 하는데 무슨소리인지 잘 모르겠😓