
처음엔 숫자 원소를 덱에 넣고 D연산을 할 때마다 통째로 뒤집는 방법을 생각했다가 실패했다.
Deque를 활용하고자 했다 -> 양방향에서 접근이 가능하니깐..
pollFirst() or pollLast()
boolean 자료형을 잘 안쓰는 버릇이 있다보니 활용을 잘 못하는 듯..
그 다음으로 고려해야 할 것은 에러처리 -> D 연산을 할 때마다 size확인
입력 형식에 대괄호하고 , 가 포함되어 있기 때문에 StringTokenizer로 문자열을 분리함
찾아보니 split()으로 분리하는 방법도 있었고, 해당 방식이 권장되고 있었음
* 만약 split()을 사용하고싶은 경우 정규식으로는
* String input = br.readLine();
* String[] s = input.subString(1, input.length - 1).split(","); 을 해주어야 한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.StringTokenizer;
public class AC {
public static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
public static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
//백준 5430번
ArrayDeque<Integer> deque;
StringTokenizer st;
int T = Integer.parseInt(br.readLine());
while(T --> 0){
String command = br.readLine(); //명령어
int n = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine(),"[],");
deque = new ArrayDeque<Integer>();
for(int i = 0; i<n; i++){
deque.add(Integer.parseInt(st.nextToken()));
}
ACC(command,deque);
}
System.out.println(sb);
}
public static void ACC(String command, ArrayDeque<Integer> deque) {
boolean isRight = true;
for(char cmd : command.toCharArray()){
if(cmd =='R'){
isRight = !isRight;
continue;
}
//D의 경우
//D함수이면서 방향을 바꾼적 없을 때
if(isRight){
//원소가 비어있을 경우 error를 출력하고 함수 종료
if (deque.pollFirst() == null){
sb.append("error\n");
return;
}
}
else{ //D 함수이면서 방향을 바꿨을 때
if(deque.pollLast() == null){
sb.append("error\n");
return;
}
}
}
//모든 함수가 정상적으로 작동했다면 덱에 남아있는 요소들을 출력문으로
MakePrint(deque,isRight);
}
public static void MakePrint(ArrayDeque<Integer> deque, boolean isRight) {
sb.append('['); //우선 여는 대괄호 먼저 저장
if(deque.size() > 0){ //출력할 원소가 한 개 이상 있을 경우
if(isRight){//정방향일 경우
sb.append(deque.pollFirst());
while (!deque.isEmpty()){ //그러고 나서 deque 가 비어있지 않다면,
sb.append(',').append(deque.pollFirst());
}
}
else{ //역방향일 경우
sb.append(deque.pollLast());
while(!deque.isEmpty()){
sb.append(',').append(deque.pollLast());
}
}
}
sb.append(']').append('\n'); //닫는 대괄호 및 개행
}
}