문제
풀이
- 정수를 저장하는 덱을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하라.
- push_front X: 정수 X를 덱의 앞에 넣는다.
- push_back X: 정수 X를 덱의 뒤에 넣는다.
- pop_front: 덱의 가장 앞에 있는 수를 빼고, 그 수를 출력한다. 만약, 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- pop_back: 덱의 가장 뒤에 있는 수를 빼고, 그 수를 출력한다. 만약, 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 덱에 들어있는 정수의 개수를 출력한다.
- empty: 덱이 비어있으면 1을, 아니면 0을 출력한다.
- front: 덱의 가장 앞에 있는 정수를 출력한다. 만약 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- back: 덱의 가장 뒤에 있는 정수를 출력한다. 만약 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.
-> queue를 구현하기 위해 collectins의 deque 모듈
을 불러온다
-> 각 명령어에대한 조건에 따라 함수를 매칭시켜 접근하였다.
코드
from collections import deque
def push_front_x(queue, num):
queue.appendleft(num)
def push_back_x(queue, num):
queue.append(num)
def pop_front(queue):
if not len(queue):
return -1
num = queue.popleft()
return num
def pop_back(queue):
if not len(queue):
return -1
num = queue.pop()
return num
def size(queue):
return len(queue)
def empty(queue):
return 0 if queue else 1
def front(queue):
return queue[0] if queue else -1
def back(queue):
return queue[-1] if queue else -1
def solve(order_list):
queue = deque()
for order in order_list:
if order == 'pop_front':
print(pop_front(queue))
elif order == 'pop_back':
print(pop_back(queue))
elif order == 'size':
print(size(queue))
elif order == 'empty':
print(empty(queue))
elif order == 'front':
print(front(queue))
elif order == 'back':
print(back(queue))
else:
order, num = order.split()
if order == 'push_front':
push_front_x(queue, num)
else:
push_back_x(queue, num)
if __name__ == '__main__':
n = int(input())
order_list = [str(input()) for _ in range(n)]
solve(order_list)
결과
출처 & 깃허브
BOJ 10866
github