역시나 지난번에 푼 문제에 이어서 collections에 있는 deque를 이용하는 문제이다.
이번에는 appendleft()가 추가되었다!
문제의 큰 흐름은 앞서 스택에서 했던 부분과 유사하여 크게 설명하지 않고 늘 그렇듯이 주석으로 남겼다.
import sys
from collections import deque
input = sys.stdin.readline # 시간 초과 error를 해결하기 위한 input함수 재정의
deque_list = deque() # collections library 중 deque를 사용하면 queue를 시간 안에 구현 가능
N = int(input()) # command 개수 입력
for _ in range(N): # command 개수만큼 반복
command = input().split() # 줄바꿈 문자를 제외하고 공백을 기준으로 분리
if command[0] == 'push_front': # 명령어가 push_front일 경우 deque_list의 가장 처음에 값을 추가
deque_list.appendleft(int(command[1]))
elif command[0] == 'push_back': # 명령어가 push_back인 경우 deque_list의 가장 마지막에 값을 추가
deque_list.append(int(command[1]))
elif 'pop' in command[0]: # 명령어가 pop_front 또는 pop_back인 경우
if len(deque_list) == 0: # deque_list가 비어있다면 -1을 출력
print(-1)
elif 'front' in command[0]: # 명령어가 pop_front인 경우 가장 처음 값을 pop
print(deque_list.popleft())
else: # 명령어가 pop_back인 경우 가장 마지막 값을 pop
print(deque_list.pop())
elif command[0] == 'size': # 명령어가 size인 경우 deque_list의 size를 출력
print(len(deque_list))
elif command[0] == 'empty': # 명령어가 empty인 경우
print(1 if len(deque_list) == 0 else 0) # deque_list가 빈 값이면 1을 출력하고 아니면 0을 출력
else: # 명령어가 front 또는 back일 경우
if len(deque_list) == 0: # deque_list가 비어있다면 -1을 출력
print(-1)
elif command[0] == 'front': # 명령어가 front일 경우 가장 처음 값을 출력
print(deque_list[0])
else: # 명령어가 back일 경우 가장 마지막 값을 출력
print(deque_list[-1])
'Algorithm Test > BaekJoon' 카테고리의 다른 글
BaekJoon 10799 - 쇠막대기 (Python) (0) | 2022.03.04 |
---|---|
BaekJoon 17413 - 단어 뒤집기 2 (Python) (0) | 2022.03.03 |
BaekJoon 1158 - 요세푸스 문제 (Python) (0) | 2022.03.01 |
BaekJoon 10845 - 큐 (Python) (0) | 2022.02.28 |
BaekJoon 1406 - 에디터 (Python) (0) | 2022.02.25 |