백준 5430 - AC
Updated:
Java
5430 번 - AC
문제
접근 방법
Deque의 원리를 사용하여 해결하였다.
R
함수를 받았을 때, 문자열을 뒤집는 것이 아닌 반대 방향에서 poll하는 방식으로 뒤집은 것 처럼 나타내었다.
코드
import java.util.*;
import java.io.*;
public class Main {
static int n, result;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stk;
int tc = stoi(br.readLine());
String odr, input;
next: while(tc-- != 0) {
odr = br.readLine();
n = stoi(br.readLine());
input = br.readLine();
// [ ]와 ,를 없앤 뒤 수를 deque 에 넣는다.
input = input.substring(1,input.length() - 1);
stk = new StringTokenizer(input,",");
Deque<String> deque = new ArrayDeque<String>();
for(int i = 0; i < n; i++) {
deque.add(stk.nextToken());
}
// pollFirst, pollLast를 할 지 선택하는 flag
boolean front = true;
char order;
for(int i = 0; i < odr.length(); i++) {
order = odr.charAt(i);
if(order == 'R') {
front = !front; // 이제 부터 반대 편에서 연산한다.
}
else {
if(deque.isEmpty()) {
System.out.println("error");
continue next;
}
if(front) {
deque.pollFirst();
}
else {
deque.pollLast();
}
}
}
StringBuilder sb = new StringBuilder();
// 마지막으로 앞에서 부터 확인한다면
if(front) {
sb.append('[');
while(!deque.isEmpty()) {
sb.append(deque.pollFirst());
if(!deque.isEmpty()) {
sb.append(',');
}
}
sb.append(']');
}
else {
sb.append('[');
while(!deque.isEmpty()) {
sb.append(deque.pollLast());
if(!deque.isEmpty()) {
sb.append(',');
}
}
sb.append(']');
}
System.out.println(sb.toString());
}
br.close();
}
static int stoi(String str) {
return Integer.parseInt(str);
}
}
총평
후기
정답률 20퍼대라 조금 겁 먹었지만, 오히려 쉽게 해결 할 수 있었던 문제,
자바의 deque의 위력을 깨달았다.