로직을 짜는건 쉬웠다.. 근데 출력처리에서 반례를 찾는데 한참 걸렸고 입력받을때 문자를 숫자로 변환하는 함수가 틀려서 이거 찾는것도 한시간이나 걸려서 겨우 찾았다...
덱? 은 안쓰고 투포인터로 풀었다
https://www.acmicpc.net/problem/5430
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(br.readLine());//~100
for (int i = 0; i < t; i++) {
String[] input = br.readLine().split("");
//1 ~ 100000
char[] function = new char[input.length];
for (int j = 0; j < input.length; j++) {
function[j] = input[j].charAt(0);
}
int n = Integer.parseInt(br.readLine());//0~100000
int num = 0;
ArrayList<Integer> arr = new ArrayList<>();
input = br.readLine().split("");
for (int j = 0; j < input.length; j++) {
if(isNum(input[j].charAt(0))){
num = num*10 + Integer.parseInt(input[j]);
}else if(num != 0){
arr.add(num);
num = 0;
}
}
int left = 0;
int right = arr.size()-1;
boolean isLeft = true;
boolean error = false;
for (int j = 0; j < function.length; j++) {
if(function[j] == 'R'){
isLeft = !isLeft;
}else{
if(left > right){
error = true;
break;
}
if(isLeft){
left++;
}else{
right--;
}
}
}
if(error)
System.out.println("error");
else{
StringBuilder sb = new StringBuilder();
if(left == right){
sb.append("["+arr.get(left)+"]");
}else {
if(isLeft){
for (int j = left; j <= right; j++) {
if(j== left){
sb.append("[" + arr.get(j));
}else if(j == right){
sb.append("," + arr.get(j) + "]");
}else{
sb.append("," + arr.get(j));
}
}
} else {
for (int j = right; j >= left; j--) {
if (j == right) {
sb.append("[" + arr.get(j));
} else if (j == left) {
sb.append("," + arr.get(j) + "]");
} else {
sb.append("," + arr.get(j));
}
}
}
}
if(sb.length() == 0)
sb.append("[]");
System.out.println(sb.toString());
}
}
}
public static boolean isNum(char c){
if(c - '0' >= 0 && c-'0'<=9)
return true;
return false;
}
}
글 잘 봤습니다, 감사합니다.