조건에 맞추어 문자열을 파싱해서 출력한다!
구현
O(N)
처음에는 아무생각없이 일반 구현인 줄 알고 회전 명령이 들어오는대로 처리를 했더니 시간초과가 났다...
일괄적으로 명령을 받아 범위만 확정지은 후에 파싱하는 방법으로 해결했다!
또한 O(N)의 시간 복잡도를 유지하기위해 자바 컬렉션의 Deque를 사용했다.
잘 모르겠다
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
for (int i = 0; i < N; i++) {
String method = br.readLine();
int len = Integer.parseInt(br.readLine());
String arr = br.readLine();
arr = arr.substring(1, arr.length() - 1);
Deque<String> deque = new LinkedList<>(Arrays.asList(arr.split(",")));
boolean rot = false;
boolean isError = false;
for (char cmd : method.toCharArray()) {
if (cmd == 'R') {
rot = !rot;
} else {
if (deque.isEmpty() || deque.peek().equals("")) {
sb.append("error\n");
isError = true;
break;
}
if (rot) {
deque.removeLast();
} else {
deque.removeFirst();
}
}
}
if (!isError) {
sb.append("[");
while (!deque.isEmpty()) {
if (rot) {
sb.append(deque.removeLast());
} else {
sb.append(deque.removeFirst());
}
if (!deque.isEmpty()) {
sb.append(",");
}
}
sb.append("]\n");
}
}
System.out.print(sb);
}
}