처음에 ArrayList로 만들어서 구현했는데 생각해보니 ArrayList는 검색은 용이하나 삭제나 삽입의 경우 비효율적이기 때문에
Deque를 이용하기로 한다.
또한 이 문제는 Deque를 이용해서 푸는게 바람직하다.
import java.util.*;
import java.io.*;
public class Main {
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
ArrayDeque<Integer> deque;
StringTokenizer st;
int T = Integer.parseInt(br.readLine());
while (T-- > 0) {
deque = new ArrayDeque<Integer>();
String function = br.readLine();
int k = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine(), "[],");
for (int i = 0; i < k; i++) {
int x =Integer.parseInt(st.nextToken());
deque.offer(x);
}
AC(deque, function);
}
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
static void AC(ArrayDeque<Integer> deque, String function) {
char[] func_arr = function.toCharArray();
boolean rf = false;//false가 원래
for (char f : func_arr) {
if (f == 'R') {
if (rf == true) {
rf = false;
} else {
rf = true;
}
continue;
}
if (rf == true) {
if (deque.pollLast() == null) {
sb.append("error\n");
return;
}
} else {
if (deque.pollFirst() == null) {
sb.append("error\n");
return;
}
}
}
makeresult(deque, rf);
}
static void makeresult(ArrayDeque<Integer> deque, boolean rf) {
int size = deque.size();
sb.append("[");
if (deque.size() > 0) {
if (rf == true) {
int first = deque.pollLast();
sb.append(first);
for (int i = size - 1; i >= 1; i--) {
sb.append("," + deque.pollLast());
}
} else {
int first = deque.pollFirst();
sb.append(first);
for (int i = 1; i < size; i++) {
sb.append("," + deque.pollFirst());
}
}
}
sb.append("]").append("\n");
}
}