https://www.acmicpc.net/problem/5430
import sys
from collections import deque
input = sys.stdin.readline
for _ in range(int(input())):
cmd = input().strip()
# cmd 내 D 함수의 총 개수
d_count = cmd.count('D')
# 배열에 들어 있는 수의 개수
size = int(input())
# 문자열을 리스트 형식으로 바꾸고 있음
data = input().strip()[1:-1].split(',')
# 리스트 안의 요소들을 int 형식으로 바꿔줌
# 만약 리스트가 비었거나 [''] -> 숫자로 변환할 수 없으므로 이 케이스 제외
if len(data) > 0 and data[0] != '':
for i in range(len(data)):
data[i] = int(data[i])
# data 리스트를 deque화
q = deque(data)
# D 함수의 총 개수가 수의 개수를 초과하면 에러
if d_count > size:
print("error")
continue
# 만약 명령어가 RDDR...이라면
# [[R, 1], [D, 2], [R, 1] ...] 형식으로 저장하는 cmd_list
cmd_list = []
prev_code = None # 직전의 코드를 저장
for code in cmd:
if len(cmd_list) == 0:
cmd_list.append([code, 1])
prev_code = code #cmd_list에 삽입한 code를 prev_code로 저장
else:
if code == prev_code:
cmd_list[-1][1] += 1
else:
cmd_list.append([code, 1])
prev_code = code
# cmd_list를 순회하면서 고고
# reverse를 나타내는 flag
REVERSE = False
for code in cmd_list:
if code[0] == "R":
# R이 홀수번 등장하면 reverse의 현재 상태의 역을 취함!
if code[1] % 2 == 1:
REVERSE = not REVERSE
elif code[0] == "D":
# REVERSE가 True이면 pop
if REVERSE:
# D의 개수만큼 반복
for i in range(code[1]):
q.pop()
# REVERSE가 False이면 popleft
else:
# D의 개수만큼 반복
for i in range(code[1]):
q.popleft()
# 출력
# 만약 출력 단계에서 REVERSE = True인 상태라면
# 뒤에서부터 출력해야한다
if REVERSE:
print_list = list(q)
print_list.reverse()
# 이 문제의 함정! 리스트를 프린트 할 때 콤마 뒤에 띄어쓰기 없어
print('[' + ','.join(map(str, print_list)) + ']')
else:
print_list = list(q)
print('[' + ','.join(map(str, print_list)) + ']')