https://www.acmicpc.net/problem/5430
R: 배열에 있는 수의 순서를 뒤집는 함수D: 첫 번째 수를 버리는 함수파싱만 잘한다면 쉽게 해결할 수 있는 문제
예제를 보면 [1,2,3,4], [1,1,2,3,5,8]와 같이 리스트 형태로 입력을 받습니다.
이를 deque에 저장할 때, 앞뒤 괄호는 버리고 ","를 기준으로 파싱하면 값을 올바르게 저장할 수 있습니다.
arr = deque(map(int,x[1:-1].split(",")))
여기서 길이(n)가 0일 때는 위 코드에 오류가 발생할 수 있으니, 빈 배열을 선언해줍니다.
if n == 0:
arr = deque()
else:
arr = deque(map(int,x[1:-1].split(",")))
처음 함수 R을 구현할 때, R이 나타날 때마다 reverse()를 진행해주었는데 굉장히 비효율적이더군요.
그래서 reverse 여부를 알 수 있게 flag를 선언했습니다.
flag = False # 뒤집혀 있지 않은 상태
for c in p:
if c == "R":
flag = not flag # flag 상태의 반대 상태로 변환
이제 함수 D을 구현해봅시다.
여기서도 flag를 이용해 함수가 뒤집혀있을 경우 뒤에 있는 값을 삭제해주고, 아니라면 첫 번째 값을 삭제합니다.
elif c == "D":
if not arr:
return 'error' # 배열이 비어있을 경우 error 출력
if flag: # 뒤집혀 있을 경우
arr.pop() # 뒤쪽에 있는 값 제거
else: # 아닐 경우
arr.popleft() # 첫 번째 값 제거
마지막으로 flag를 확인해 True라면 배열을 뒤집어주고 map과 join을 이용해 출력해주면 됩니다.
if flag:
arr.reverse()
return f"[{','.join(map(str, arr))}]"
처음 문제를 풀 때, 예제를 제대로 확인하지 않고 진행하다 계속 틀렸었습니다..
예제를 자세히 보면

입력값과 마찬가지로 값들 사이에 띄어쓰기가 없어요 ‼️
처음엔 리스트 자체를 출력했었는데 예제를 잘 확인하지 않아 틀렸던..
다른 분들은 잘 확인하시길 바라요 😂
from collections import deque
import sys
input = sys.stdin.readline
def func():
p = input().rstrip()
n = int(input())
x = input().rstrip()
if n == 0:
arr = deque()
else:
arr = deque(map(int,x[1:-1].split(",")))
flag = False
for c in p:
if c == "R":
flag = not flag
elif c == "D":
if not arr:
return 'error'
if flag:
arr.pop()
else:
arr.popleft()
if flag:
arr.reverse()
return f"[{','.join(map(str, arr))}]"
if __name__ == "__main__":
t = int(input())
for tc in range(t):
print(func())