BOJ_G5_5430
๐ [G5_5430] AC
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Main {
static ArrayDeque<Integer> deque;
static String str, error;
static int N;
static StringBuilder sb;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
sb = new StringBuilder();
// ํ
์ผ
int TC = Integer.parseInt(br.readLine());
for (int t = 0; t < TC; t++) {
// ํจ์ ์
๋ ฅ
str = br.readLine();
// ์์ ๊ฐ์ ์
๋ ฅ
N = Integer.parseInt(br.readLine());
// error ์ ์ฅ
error = "";
// ArrayList ( ์ ์ ์ฅ ๋ฆฌ์คํธ )
deque = new ArrayDeque<Integer>();
st = new StringTokenizer(br.readLine(), "[,]");
for (int i = 0; i < N; i++) {
deque.add(Integer.parseInt(st.nextToken()));
}
go();
}
System.out.println(sb);
}
static void go() {
// ์์ธ์ง ๋ค์ธ์ง ( ์ true, ๋ค false )
boolean check = true;
for(int i=0; i<str.length(); i++) {
// R ํจ์์ธ ๊ฒฝ์ฐ ๋ฐฉํฅ ๋ฐ๊พธ๊ธฐ
if(str.charAt(i) == 'R') {
check = !check;
}
// D ํจ์ ์ธ ๊ฒฝ์ฐ
else if(str.charAt(i) == 'D') {
// ๋ฐฐ์ด์ด ์ ๋ฐฉํฅ์ธ ๊ฒฝ์ฐ
if(check) {
// ํฌ๊ธฐ๊ฐ ์๋ ๊ฒฝ์ฐ
if(deque.size()<1) {
error = "error";
}else {
deque.removeFirst();
}
}
// ๋ฐฐ์ด์ด ๋ฐ๋์ธ ๊ฒฝ์ฐ
else {
// ํฌ๊ธฐ๊ฐ ์๋ ๊ฒฝ์ฐ
if(deque.size()<1) {
error = "error";
}else {
deque.removeLast();
}
}
}
}
print(check);
}
static void print(boolean check) {
// error ์ธ ๊ฒฝ์ฐ
if(error.equals("error")) {
sb.append("error").append("\n");
}
// ์๋ ๊ฒฝ์ฐ
else {
sb.append("[");
// ์ ๋ฐฉํฅ์ธ ๊ฒฝ์ฐ ๊ทธ๋๋ก ์ถ๋ ฅ
if(check) {
int a = deque.size();
for(int i=0; i<a;i++) {
sb.append(deque.poll());
// ์ผํ
if(i != a-1) {
sb.append(",");
}
}
}
// ์๋ ๊ฒฝ์ฐ ๋ฐ๋๋ก ์ถ๋ ฅ
else {
int a = deque.size();
for(int i=0; i<a;i++) {
sb.append(deque.pollLast());
// ์ผํ
if(i != a-1) {
sb.append(",");
}
}
}
sb.append("]").append("\n");
}
}
}
๐ค ๋์ ์๊ฐ
๋ฌธ์ ๋ ์ฝ๊ฒ ๋ณด์์ง๋ง .. ์ญ์ ์๊ฐ์ด๊ณผ ..
๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ์ R ํจ์๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋ ์ธ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ฅ ์ด์ค for๋ฌธ์ผ๋ก ์ฒ๋ฆฌํ๋ p์ n ๊ฐ์ด ์ปค์ ์๊ฐ์ด๊ณผ๊ฐ ๋ฌ๋ค.
๊ทธ๋์ ์๊ฐํด์ผ ํ๋ ๊ฒ์ deque๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
deque๋ฅผ ํตํด R ํจ์๊ฐ ํธ์ถ๋ ๋๋ boolean ๊ฐ์ ์ด์ฉํด ์์ธ์ง ๋ค์ธ์ง๋ง ์ฒดํฌํด์ฃผ๊ณ D ํจ์๊ฐ ํธ์ถ๋ ๋๋ firstremove() ๊ณผ lastremove()์ ํตํด ๊ฐ์ ์ง์์ฃผ๊ณ
๋ค ์ถ๋ ฅํ ๋๋ boolean ๊ฐ์ ๋ฐ๋ผ firstpoll()๊ณผ lastpoll()์ ์ด์ฉํ๋ฉด ๋๋ค.