문제 링크 : https://www.acmicpc.net/problem/5430
입력을 받는 것부터 쉽지 않은 문제이다.
우선 입력을 받은 뒤에 tempList[1:-1]과 같이 슬라이싱을 해주고 이를 ','를 기준으로 쪼개준 것을 deque에 넣었다. 그러나 만약에 n이 0인 경우에는 deque의 길이가 1이 된다. 따라서 n이 0인 경우에는 deque()로 초기화를 시켜주어서 deque의 길이가 0이 되도록 해주었다.
그 다음엔 리스트 p에 담긴 R 또는 D의 작업들을 수행해줬다.
R의 경우는 reverse 변수를 반전시켜줬다. D의 경우는 우선 queue가 비어 있는지 검사를 해줬다. 만약에 queue가 비어 있으면 error = True로 바꿔주고 반복문을 break를 통해 빠져나왔다. 만약에 queue가 비어 있지 않다면 queue에서 값을 빼주었는데, reverse == True인 경우에는 pop을, reverse == False인 경우에는 popleft를 해주었다.
주어진 작업들을 다 수행한 뒤에는 변수 error의 값을 체크해준다. error == True이면 'error'를 출력시켜준다. error == False라면 queue에 남아 있는 수들을 배열 형태로 출력해준다. 만약 reverse == True 라면 역순으로 출력해주고, reverse == False 라면 원래 순서 그대로 출력해준다.
from sys import stdin
from collections import deque
t = int(stdin.readline())
for _ in range(t):
p = list(stdin.readline().rstrip())
n = int(stdin.readline())
tempList = stdin.readline().rstrip()
queue = deque(tempList[1:-1].split(','))
if n == 0:
queue = deque()
error = False
reverse = False
for cmd in p:
if cmd == 'R':
reverse = not reverse
elif cmd == 'D':
if not queue:
error = True
break
if reverse:
queue.pop()
else:
queue.popleft()
if error:
print('error')
else:
if reverse:
l = list(reversed(queue))
else:
l = list(queue)
print('[',end='')
cnt = 0
for i in l:
print(i,end='')
cnt += 1
if cnt != len(l):
print(',',end='')
print(']')