https://www.acmicpc.net/submit/10845/51424407
문제 설명
deque
python에서는 collections
모듈에서deque
를 지원한다.deque
는 스택과 큐가 합쳐진 자료구조로, 양쪽 방향에서 모두 append와 pop이 가능하다.- 일반 리스트와 같이
append
,pop
을 사용하고, 왼쪽에서 원소를 추가할 떈appendleft()
왼쪽에서 pop할 떈popleft()
명령어를 사용하면 된다.두개의 스택
- 두개의 스택으로
que
처럼 사용할 수 있다.- 왼쪽에서 모든 원소를 가지고 있다가,
append, push
명령이 들어오면 오른쪽 스택에 모두pop
한다.- 그렇다면 오른쪽 스택은 왼쪽 스택의 반대의 순서를 가지며, 거기서 pop()하는 순서는 큐와 같은 First In First Out이 된다.
python collections의 deque모듈 사용
from collections import deque import sys input=sys.stdin.readline que = deque() order_dict = { 'push' : (lambda x: que.append(x)), 'pop' : (lambda x: print(que.popleft() if que else -1)), 'size' : (lambda x: print(len(que))), 'empty' : (lambda x: print(0 if que else 1)), 'front' : (lambda x: print(que[0] if que else -1)), 'back' : (lambda x: print(que[-1] if que else -1)) } for i in range(int(input())): order = input().strip().split() + [''] order_dict[order[0]](order[1])
두개의 Stack 이용
left = [] right = [] for i in range(int(input())): order = input().strip().split() if order[0] == 'push': left.append(order[1]) elif order[0] == 'pop': if left: while left: right.append(left.pop()) print(right.pop()) while right: left.append(right.pop()) else: print(-1) elif order[0] == 'size': print(len(left)) elif order[0] == 'empty': print(0 if left else 1) elif order[0] == 'front': print(left[-1]) elif order[0] == 'back': print(left[0])