https://www.acmicpc.net/problem/5430
ํด๋น ๋ฌธ์ ๋ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ํํ ํจ์, ๋ฐฐ์ด์ ์๋ ์, ์์ ๋ฐฐ์ด์ ์ ๋ ฅ๋ฐ์ผ๋ฉฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ฌ์ผ ํฉ๋๋ค.
์์ ๋ฐฐ์ด์ ๊ฒฝ์ฐ๋ ์ซ์๊ฐ ์๋ [1,2,3,4]
์ ๊ฐ์ ํํ๋ก ์ฃผ์ด์ ธ์ ํ์ฑํ๋ ์์
์ ์งํํ๋ฉฐ ๋ด๋ถ์ ์ซ์๋ฅผ ์ฌ์ฉ์์ ๋ฌธ์ ํ์ด ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ๋ฐฐ์ด ๋๋ ๋ฆฌ์คํธ์ ๋ด์์ฃผ๋ ์์
์ ํ์ฌ์ผํฉ๋๋ค. ์ ๋ ๋ค์ง๋ ๋ช
๋ น์ Collections
์ reverse()
๋ฉ์๋๋ฅผ ํตํด ๋ฌธ์ ๋ฅผ ํ์ดํ์ฌ ๋ฐฐ์ด์ ๋ฆฌ์คํธ๋ก ๋ฐํํ์์ต๋๋ค.
ํ์ฑ ๋ถ๋ถ์ ์์ฑ ์ฝ๋๋
parseArr()
๋ฉ์๋๋ฅผ ํตํด ํ์ธํ์ค ์ ์์ต๋๋ค.
ํ์ฑ์ ํ ํ์๋ R๊ณผ D๋ก ์ด๋ฃจ์ด์ง ์ํํ ํจ์์ ๋ช
๋ น์ ๋ฐ๋ฅธ ์ํ ๋ฉ์๋๋ฅผ ๊ตฌํํด์ผํฉ๋๋ค. ๋ช
๋ น์ ๋ฐ๋ผ ๊ฐ๊ฐ list๋ฅผ ๋ค์ง๊ฑฐ๋ ๊ฐ์ ์ญ์ ํ๋ ์์
์ ํ์์ต๋๋ค. ์ฌ๊ธฐ์ ๊ฐ์ ์ญ์ ์ ๊ฐ์ ๋ถ์กฑ์ผ๋ก ์ธํ ์ค๋ฅ๋ try/catch
๋ฌธ์ผ๋ก IndexOutOfBoundsException
์ ์ก์ ์ error๋ฅผ ๋ฆฌํดํ๋๋ก ์์ฑํ์์ต๋๋ค.
๋ช ๋ น ์ํ์ ํ ๋
R
๋ช ๋ น์ด ๋์ฌ ๋๋ง๋คCollections.reverse()
๋ฉ์๋๋ฅผ ํตํด ๋ค์ง๊ฒ ๋๋ค๋ฉด ๋ด๋ถ์ ์ผ๋ก ๋ง์ ์๊ฐ์ด ์๋ชจ๋์ด์ ์ฝ๋ ์ ์ถ ์ ์คํ์ด๊ณผ๋ผ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋์ ์ด ๋ถ๋ถ์isReverse
๋ณ์๋ฅผ ๋ฐ๋ก ์์ฑํ์ฌCollections.reverse()
๋ ๋ฑ ํ๋ฒ๋ง ์ํ๋๋๋ก ํ์๋๋ ์ฝ๋๊ฐ ํต๊ณผ๋ฅผ ํ๊ฒ ๋์์ต๋๋ค
๋ช ๋ น ์ํ ์ฝ๋๋
executeFunction()
๋ฉ์๋๋ฅผ ํตํด ํ์ธํ์ค ์ ์์ต๋๋ค.
๋ช ๋ น ์ํ์ ๋ง์น ํ์๋ ๋จ์ ๋ฐฐ์ด์ ์ณ๋ฐ๋ฅธ ํํ๋ก ๋ค์ ๋ณํํ์ฌ Stringํ์ ์ผ๋ก returnํ์์ต๋๋ค.
๊ฒฐ๊ณผ๋ฅผ String์ผ๋ก ํ์ฑํ๋ ์ฝ๋๋
makeResultString()
๋ฉ์๋๋ฅผ ํตํด ํ์ธํ์ค ์ ์์ต๋๋ค.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int T = Integer.parseInt(br.readLine());
for (int i = 0; i < T; i++) {
String command = br.readLine();
int n = Integer.parseInt(br.readLine());
String inputArr = br.readLine();
bw.append(executeFunction(command, n, parseArr(inputArr)));
}
bw.flush();
bw.close();
br.close();
}
public static List<Integer> parseArr(String inputArr) {
List<Integer> numList = new ArrayList<>();
Arrays.stream(inputArr.substring(1, inputArr.length() - 1).split(","))
.forEach(s -> {
if (!s.equals("")) numList.add(Integer.parseInt(s));
});
return numList;
}
public static String executeFunction(String command, int n, List<Integer> numList) {
boolean isReverse = false;
for (int i = 0; i < command.length(); i++) {
if (command.charAt(i) == 'R') {
isReverse = !isReverse;
}
if (command.charAt(i) == 'D') {
try {
if (isReverse)
numList.remove(numList.size() - 1);
else
numList.remove(0);
} catch (IndexOutOfBoundsException e) {
return "error\n";
}
}
}
if (isReverse) {
Collections.reverse(numList);
}
return makeResultString(numList);
}
public static String makeResultString(List<Integer> numList) {
if (numList.isEmpty()) {
return "[]\n";
}
StringBuilder sb = new StringBuilder();
sb.append("[");
numList.stream()
.forEach(integer -> {
sb.append(integer);
sb.append(",");
});
sb.deleteCharAt(sb.length() - 1);
sb.append("]\n");
return sb.toString();
}
}