https://www.acmicpc.net/problem/5430
# 2023.01.08
import sys
input = sys.stdin.readline
from collections import deque
t = int(input())
for i in range(t):
p=list(input().strip())
n=int(input())
if n==0:
number=input()
number=[]
else:
number=deque(input().strip()[1:-1].split(","))
R=0
answer=1
for j in p:
if j=='R': # R=>뒤집어야 할때
R+=1
else: # W=>제일 첫번째 수를 버려야 할때
if len(number)==0:
print("error")
answer=0
break
elif R%2==1:
number.pop()
else:
number.popleft()
if answer==1 and R%2==0:
print("["+",".join(number)+"]")
elif answer==1 and R%2==1:
number.reverse()
print("["+",".join(number)+"]")
key point!
"R"가 나올때 마다 뒤집어주면 시간초과 => R이 나오는 횟수를 세어줌
1. R이 나오면 횟수를 세어줌
2. D가 나오면 R의 횟수를 확인해봄
2-0) D가 나와서 첫번째 수를 제거해야 하는데, 빈 배열인 경우 "error"출력 & answer=0으로 바꿔줌
2-1) R이 홀수번 나왔으면 뒤집힌 상태이므로 제일 뒤 제거
2-2) R이 짝수번 나왔으면 원래 상태이므로 제일 앞 제거
3. answer=1일때만 배열을 출력해줌
3-1) R이 짝수번이면 배열을 그대로 출력
3-2) R이 홀수번이면 배열을 뒤집어서 출력
핵심
배열 뒤집기를 마지막 한번만 해주는게 중요
'Problem Solving > BOJ' 카테고리의 다른 글
[Dijkstra] 1916 최소비용 구하기 (0) | 2023.01.12 |
---|---|
[BFS] 7569 토마토 (0) | 2023.01.09 |
[Brute Force] 1107 리모컨 (0) | 2023.01.08 |
[Brute Force] 18111 마인크래프트 (0) | 2023.01.07 |
[Queue] 1966 프린터 큐 (0) | 2023.01.07 |