import sys
input = sys.stdin.readline
t = int(input())
for _ in range(t):
p=list(input().strip())
n=int(input())
arr=input().strip().strip('[').strip(']').split(',')
dir=1 # 정순
index=0 # 현재 index
front=0
back=n-1
end=back # 마지막 index
popped=0
for d in p:
if d == 'R':
dir=-dir
if dir==1:
back=index
index=front
end=back
else:
front=index
index=back
end=front
#end= -1 if end==n else n
elif d=='D':
index+=dir
popped+=1
if popped>n: #(dir==1 and index>end) or (dir==-1 and index<end):
print('error')
else:
print('[',end='')
for i in range(index,end+dir,dir):
print(arr[i],end='')
if i != end : print(',',end='')
print(']')
변수를 세워서 했다. 약간 비효율적인 것도 많은데 pop을 하는 것은 너무 소비가 클것 같고 또, 조건문으로 구분하는 것보다 효율적이지 않을까? 라는 생각을 했지만 메모리가 조금 아쉬울 것 같긴 하다.
1. dir을 기준으로 index를 움직인다.
2. front,back을 통해 R시 배열의 마지막을 구분하도록 했다.
3. 틀렸습니다.를 두번 보았는데 질문글 여기에서 3번을 보고 깨달았다. 빈 배열에서 D를 해야 error인데 그걸 놓쳤다.
import sys
from collections import deque
t = int(input())
for i in range(t):
p = sys.stdin.readline().rstrip()
n = int(input())
arr = sys.stdin.readline().rstrip()[1:-1].split(",")
queue = deque(arr)
rev, front, back = 0, 0, len(queue)-1
flag = 0
if n == 0:
queue = []
front = 0
back = 0
for j in p:
if j == 'R':
rev += 1
elif j == 'D':
if len(queue) < 1:
flag = 1
print("error")
break
else:
if rev % 2 == 0:
queue.popleft()
else:
queue.pop()
if flag == 0:
if rev % 2 == 0:
print("[" + ",".join(queue) + "]")
else:
queue.reverse()
print("[" + ",".join(queue) + "]")
deque를 이용해 pop하는 방식
reverse를 한번만 하도록