마다 뒤집는 과정을 반복하면, 분명 시간초과가 나올거다. 의 시간을 효과적으로 줄일 공식이 필요하다.
→ 덱을 활용하면 된다.
먼저 입력을 받아준다. spl
은 split()
을 의미한다. 그냥 인덱스로 뽑아도 될 거 같긴 한데 그냥 ,
마다 나누어 String[]
으로 받았다.
try catch
를 활용하였다. 덱의 함수인 remove()
를 사용하여 값이 더이상 없음에도 뽑아내려 한다면, catch
코드를 통해 “error” 를 프린트하도록 할 것이다.
예상 가능한 에러 처리를 먼저 하였다. 입력받은 sp
가 “[]” 로만 되어있고 값을 뽑아내는 “D” 가 하나라도 존재한다면 new Error()
를 호출하여, catch
코드로 이동하게 하였다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayDeque;
import java.util.Deque;
public class Main {
static int T, n;
static String p, sp;
static Deque<String> dq = new ArrayDeque<>();
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
T = Integer.parseInt(br.readLine());
while (--T >= 0) {
p = br.readLine();
n = Integer.parseInt(br.readLine());
sp = br.readLine();
try {
if (sp.charAt(0) == '[' && sp.charAt(1) == ']' && p.contains("D")) {
throw new Exception();
}
String[] spl = sp.substring(1, sp.length() - 1).split(",");
for (int i = 0; i < spl.length; i++) dq.add(spl[i]);
boolean isF = true;
for (int i = 0; i < p.length(); i++) {
char tsp = p.charAt(i);
if (tsp == 'R') isF = !isF;
else {
if (isF) dq.removeFirst();
else dq.removeLast();
}
}
if (isF) poll(true);
else poll(false);
} catch (Exception e) {
printError();
}
}
System.out.println(sb.toString());
}
private static void poll(boolean check) {
sb.append("[");
while (!dq.isEmpty())
if (dq.size() == 1)
if(check)
sb.append(dq.pollFirst());
else
sb.append(dq.pollLast());
else
if(check)
sb.append(dq.poll()).append(",");
else
sb.append(dq.pollLast()).append(",");
sb.append("]\n");
}
private static void printError() {
sb.append("error\n");
}
}