문제
정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 여섯 가지이다.
- push X: 정수 X를 큐에 넣는 연산이다.
- pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 큐에 들어있는 정수의 개수를 출력한다.
- empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
- front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
입력
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
출력
출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
풀이
from collections import deque
import sys
input = sys.stdin.readline
n = int(input()) #주어지는 명령의 수 n
queue = deque([])
for _ in range(n):
a = str(input()).rstrip() #개행문자 제거해서 입력
if a == "pop": #pop
if(len(queue) == 0):
print(-1)
else:
print(queue.popleft())
elif a == "size": #size
print(len(queue))
elif a == "empty": #empty
if(len(queue) == 0):
print(1)
else:
print(0)
elif a == "front": #front
if(len(queue) == 0):
print(-1)
else:
print(queue[0])
elif a == "back": #back
if(len(queue) == 0):
print(-1)
else:
print(queue[len(queue)-1])
else: #push x
a, num = a.split()
queue.append(num)
- queue를 만들고, for문을 n번 돌면서 주어지는 입력(명령)에 따라 맞는 결과를 출력하는 형태
- a값을 입력으로 받고
a = str(input()).rstrip()
a가 pop인지, size인지, empty인지 .. if문으로 구별 - else로 push x 형태 처리
pop
if a == "pop": #pop
if(len(queue) == 0):
print(-1)
else:
print(queue.popleft())
- len(queue)가 0이라면 큐에 들어있는 정수가 없는 것이므로 -1 출력
- 그렇지 않다면
popleft()
로 큐의 가장 앞에 있는 정수를 뺀다
size
elif a == "size": #size
print(len(queue))
- 큐에 들어 있는 정수의 개수 줄력 :
len(queue)
empty
elif a == "empty": #empty
if(len(queue) == 0):
print(1)
else:
print(0)
len(queue)
가 0이라면 큐가 비어있는 것이므로 1 출력, 그렇지 않다면 0 출력
front
elif a == "front": #front
if(len(queue) == 0):
print(-1)
else:
print(queue[0])
- 큐의 가장 앞에 있는 정수 queue[0] 출력
len(queue)
가 0이라면 큐가 비어있는 것이므로 -1 출력
pop
elif a == "back": #back
if(len(queue) == 0):
print(-1)
else:
print(queue[len(queue)-1])
- 큐의 가장 뒤에 있는 정수
queue[len(queue)-1]
출력 len(queue)
가 0이라면 큐가 비어있는 것이므로 -1 출력
push X
else: #push x
a, num = a.split()
queue.append(num)
- 정수 x를 num으로 받아서 queue에 append
[저번에 풀었던 스택 문제와 비교]
import sys
input = sys.stdin.readline
n = int(input()) #주어지는 명령의 수 n
stack = []
for _ in range(n):
a = str(input()).rstrip() #개행문자 제거해서 입력
if a == "pop":
if(len(stack) == 0):
print(-1)
else:
print(stack.pop())
elif a == "size":
print(len(stack))
elif a == "empty":
if(len(stack) == 0):
print(1)
else:
print(0)
elif a == "top":
if(len(stack) == 0):
print(-1)
else:
print(stack[len(stack)-1])
else:
a, num = a.split()
stack.append(num)
'개발공부 > 코테' 카테고리의 다른 글
[백준 1406 : 에디터] 파이썬 풀이 (2) | 2023.11.12 |
---|---|
[백준 1158: 요세푸스] 파이썬 풀이 (3) | 2023.11.09 |
[백준 2839: 설탕 배달] 파이썬 풀이 (0) | 2023.09.12 |
[백준 1010: 다리 놓기] 파이썬 풀이 (0) | 2023.09.12 |
[백준 10826: 피보나치 수 4] 파이썬 풀이 (23) | 2023.09.11 |