문제 출처 : https://www.acmicpc.net/problem/5430
위의 문제는 앞과 뒤에서 숫자 배열의 값이 빠져 나갈 수 있는 자료구조인 deque를 쓰는 것이 핵심인 문제였습니다. deque를 활용해 직접 숫자 배열을 뒤집지 않고 앞서 말한 boolean 변수를 두어 뒤집기가 true이면 뒤에서 숫자를 빼고 그렇지 않으면 앞에서 숫자를 빼 불필요한 반복문을 줄일 수 있었습니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for (int i = 0; i < T; i++) {
String infos = br.readLine();
int n = Integer.parseInt(br.readLine());
Deque<Integer> num_arr = new ArrayDeque<>();
String num = br.readLine();
String[] numbers = num.substring(1, num.length() - 1).split(",");
for (String nums : numbers) {
if (!nums.equals("")) {
num_arr.add(Integer.parseInt(nums));
}
}
boolean check = true;
boolean reverse = false;
for (char info : infos.toCharArray()) {
if (info == 'R') {
reverse = !reverse;
} else {
if (num_arr.size() == 0) {
check = false;
break;
}
if (reverse) {
num_arr.pollLast();
} else {
num_arr.pollFirst();
}
}
}
if (check == true) {
sb.append("[");
while (!num_arr.isEmpty()) {
if (reverse == true) {
sb.append(num_arr.pollLast());
} else {
sb.append(num_arr.pollFirst());
}
if (num_arr.size() != 0) {
sb.append(",");
}
}
sb.append("]\n");
} else {
sb.append("error\n");
}
}
System.out.println(sb);
}
}