์ฃผ๋ง์ ํ ์ผ์ด ์์ด์ ์๋ก์ด ์ธ์ด๋ฅผ ๋ง๋ ์ ์์จ....ใ
์ด ๋ฌธ์ ๋ฅผ ํ๋ฉด์ ๋ ์ฌ๋ ธ๋ ์์ด๋์ด๋
R์ ์ ๋ ฅ๋ฐ์๋๋ง๋ค ๋ค์ง์ ๋ฐฐ์ด์ ์๋ก ์ ์ํ๋ ๊ณผ์ ์ ์ ๋ ์์ด์๋ ์๋ ๊ฒ ๊ฐ๋ค๊ณ ์๊ฐ์ด ๋ค์๋ค.
queue ๋ stack ์๋๋ฉด deque ๋ฅผ ์ ์ ํ ํ์ฉํ๋ฉด, ์ถฉ๋ถํ ๊ตฌํ ๊ฐ๋ฅํ ๋ฐฉ๋ฒ์ด์ง๋ง, ์ฑ๋ฅ์ด ๋งค์ฐ ๋จ์ด์ง ๊ฒ์ด๋ผ๊ณ ์๊ฐ์ด ๋ค์๊ณ
๋จ์ง, R ๋ช ๋ น์ด ๋ช๋ฒ ๋ค์ด์๋์ง ๊ธฐ๋กํ๊ณ , R ๋ช ๋ น์ ๊ฐฏ์์ ๋ฐ๋ผ ๋ค์์๋ถํฐ ์ง์ธ์ง ์์์๋ถํฐ ์ง์ธ์ง๋ง ๊ฒฐ์ ํ๋ฉด ๋๋ค๊ณ ์๊ฐํ๊ณ , ๊ทธ๋ ๊ฒ ๊ตฌํํ์๋ค.
deque ์ [1 2 3 4 5] ๊ฐ ์ ๋ ฅ๋์ด์๋ค๊ณ ๊ฐ์ ํ์ ๋,
deque์ poll() ์ 1์ ์ญ์ ํ๊ณ
R์ ํ์๋ฒ ์ ๋ ฅ๋ฐ์ ์ญ์์ด ๋์๋ค๊ณ ๊ฐ์ ํ์๋, D ๋ช ๋ น์ ๋์ํ๊ณ ์ถ๋ค๋ฉด
deque์ removeLast()๋ฅผ ์ด์ฉํด์, ์๋ฃ๊ตฌ์กฐ์ ๋ณ๊ฒฝ ์์ด 5๋ฅผ ์ญ์ ํ๋ฉด ๋๋ค.
๋ง ๋จธ๋ฆฟ์์ ๋ ์ค๋ฅธ๋๋ก ๊ตฌํํด์, ์ฝ๋ ์์ฒด๊ฐ ์กฐ๊ธ ์ ๋๋์ง ์์ ๊ฒ ๊ฐ๊ธดํ๋ฐ... ๊ทธ๋๋ ์ ๋ต์ ๋ง์ถฐ์ ๊ธฐ๋ถ์ด ์ข๊ตฌ๋จผ..ใ ใ
์ค๊ฐ ์ค๊ฐ ์๋ฌ ์ฒ๋ฆฌ๋ ์๊ทผํ ๊น๋ค๋ก์ ๋ ๋ฌธ์ ์๋ค.
์์ธํ ํ์ด๋ ์ ์ด๋ ์ฃผ์์ ์ฐธ๊ณ ํ๊ธธ ๋ฐ๋๋ค.
import java.io.*;
import java.util.*;
public class Main {
// ์ ์์ด๋ ์๋ก์ด ์ธ์ด AC๋ฅผ ๋ง๋ค์๋ค. AC๋ ์ ์ ๋ฐฐ์ด์ ์ฐ์ฐ์ ํ๊ธฐ ์ํด ๋ง๋ ์ธ์ด์ด๋ค.
// ๋ค์ง๊ธฐ R ๊ณผ ๋ฒ๋ฆฌ๊ธฐ D ๊ฐ ์๋ค.
// R์ ๋ฐฐ์ด์ ์๋ ์์ ์์๋ฅผ ๋ค์ง๋ ํจ์ ์ด๋ค.
// D๋ ์ฒซ๋ฒ์งธ ์๋ฅผ ๋ฒ๋ฆฌ๋ ํจ์ ์ด๋ค. ( ๋ฐฐ์ด์ด ๋น์ด์๋ ๊ฒฝ์ฐ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.)
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//ํ
์คํธ ์
Integer T = Integer.valueOf(br.readLine());
//๊ฐ ํ
์คํธ ๊ฒฐ๊ณผ๋ฅผ ํ๋ฒ์ ์ถ๋ ฅํ๊ธฐ ์ํด ๊ธฐ๋กํ StringBuilder
StringBuilder sb = new StringBuilder();
while (T-- > 0) {
//์ญ์ํด์ ์์๋ฅผ ์ ๊ฑฐํ๋ค๋ ๊ฐ๋
์, deque์ removedLast๋ก ๊ตฌํํ ๊ฒ
//์ผ๋ฐ์ ์ธ ์ ๊ฑฐ ๋ช
๋ น์ ์์์ ์ ์ผ ์ ์์๋ฅผ ์ ๊ฑฐํ๋ poll()๋ก ๊ตฌํ
Deque<Integer> dq = new LinkedList<>();
String[] commands = br.readLine().split("");
int size = Integer.valueOf(br.readLine());
String input = br.readLine();
int[] arr;
//๋ง์ฝ ์
๋ ฅ๋ ๋ฐฐ์ด์ ์ฌ์ด์ฆ๊ฐ 0์ธ ๊ฒฝ์ฐ๋, [] ๋น ๋ฐฐ์ด๋ก ์ง์ ํ๊ณ
//๊ทธ ์ธ์ ๊ฒฝ์ฐ์๋, [a,b,c,d] ํํ๋ก ์
๋ ฅ๋๊ธฐ ๋๋ฌธ์, substring์ ์ฌ์ฉํด์ int [] arr ์ ์ด๊ธฐํํ๋ค.
if (size == 0) {
arr = new int[]{};
} else {
//for ๋ฌธ์ผ๋ก ๊ตฌํํ ์ ์์ง๋ง, stream ์ฐ์ต ๊ฒธ.. stream์ผ๋ก ๊ตฌํ (stream ์์ฐ๊ณ for๋ฌธ์ผ๋ก ๊ตฌํํด๋ ์๊ด์๋ค.)
arr = Arrays.stream(input.substring(1, input.length() - 1).split(",")).mapToInt(s -> Integer.valueOf(s)).toArray();
}
// deque์ ์์๋๋ก ์
๋ ฅ(offer) ํ๋ค.
for (int element : arr) {
dq.offer(element);
}
//๋ฐ์ดํฐ๋ฅผ D ํ๋ ๊ณผ์ ์์ ์๋ฌ๊ฐ ๋ฐ์ํ์๋๊ฐ? ํ๋จํ๊ธฐ ์ํจ
boolean isError = false;
// R์ด ํ์๋ฒ ๋์๋ค๋ฉด ์ญ์์ผ๋ก ์ถ๋ ฅํด์ผํ๋ค.
int R = 0;
for (int i = 0; i < commands.length; i++) {
String command = commands[i];
//R ๋ช
๋ น์ผ ๋๋, R์ ๊ฐฏ์๋ง ์ฒดํฌ
if (command.equals("R")) {
R++;
//D ๋ช
๋ น์ธ ๊ฒฝ์ฐ
} else {
//dq์ ์ฌ์ด์ฆ๊ฐ 0์ผ ๋, D ๋ช
๋ น์ด ๋ค์ด์ค๋ ๊ฒฝ์ฐ ์๋ฌ๋ฅผ ๋ฐ์์์ผ์ผํ๋ค.
if (dq.size() == 0) {
sb.append("error\n");
isError = true;
break;
}
//dq ์ฌ์ด์ฆ๊ฐ 0์ด ์๋๋ผ๋ฉด R์ด ์ง์๊ฐ์ผ๋๋ poll()๋ก ์ ๊ฑฐ, R์ด ํ์ ๊ฐ์ผ๋๋ ์ญ์์ด ๋ ์ํ์ด๋ฏ๋ก removeLast()๋ก ์ ๊ฑฐ
if (R % 2 == 0) {
dq.poll();
} else {
dq.removeLast();
}
}
}
// ๋ชจ๋ ๋ช
๋ น ์คํ ํ์ dq์ ์ฌ์ด์ฆ๊ฐ 0์ด๋ฉด์ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์์๋ค๋ฉด [] ๊ธฐ๋ก
// D 1 [42] ์ธ ๊ฒฝ์ฐ๊ฐ ์ด์ ํด๋น
if (dq.size() == 0 && !isError) {
sb.append("[]\n");
continue;
}
// ์๋ฌ๊ฐ ๋ฐ์ํ๋ ์ํฉ์ด๋ผ๋ฉด ์๋ ๊ณผ์ ์๋ต (์ด๋ฏธ sb์ 'error' ๋ฅผ ๊ธฐ๋กํ์ผ๋ฏ๋ก)
// DD 1 [42] ์ธ ๊ฒฝ์ฐ๊ฐ ์ด์ ํด๋น
if (isError) {
continue;
}
//[a,b,c,d] ๊ผด๋ก ์ถ๋ ฅํ๊ธฐ ์ํ ์์
sb.append("[");
//์ญ์์ผ๋ก ์ ์ฅ
if (R % 2 == 1) {
//์ญ์์ ๊ฒฝ์ฐ Iterator ํด๋์ค์ descendingIterator() ๋ฅผ ์ฌ์ฉ
Iterator it = dq.descendingIterator();
while (it.hasNext()) {
sb.append(it.next() + ",");
}
sb.deleteCharAt(sb.length() - 1);
} else {
Iterator it = dq.iterator();
while (it.hasNext()) {
sb.append(it.next() + ",");
}
sb.deleteCharAt(sb.length() - 1);
}
sb.append("]\n");
}
System.out.println(sb);
}
}