https://www.acmicpc.net/problem/5430
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : 'input.txt';
let input = fs.readFileSync(filePath).toString().trim().split('\n');
const tc = +input.shift();
for (let i = 0; i < tc; i++) {
const func = input.shift();
const arrNum = +input.shift();
let arr;
if (arrNum) {
arr = input.shift().trim().split('');
arr.pop();
arr.shift();
arr = arr.join('').split(',').map(Number);
} else {
input.shift();
arr = [];
}
let curReverse = 0;
let isError = false;
for (let j = 0; j < func.length; j++) {
if (func[j] === 'R') {
curReverse += 1;
continue;
}
if (func[j] === 'D') {
if (!arr.length) {
console.log('error');
isError = true;
break;
}
if (curReverse % 2) {
arr.pop();
} else {
arr.shift();
}
}
}
if (!isError) {
if (curReverse % 2) {
console.log(`[${arr.reverse().join(',')}]`);
} else {
console.log(`[${arr.join(',')}]`);
}
}
}
✔ 알고리즘 : 문자열 + 구현
✔ Reverse 처리를 어떻게 해주는지가 관건인 문제인 것 같다. R을 입력받을때마다 배열을 뒤집는 것이 아닌 현재 나온 R의 개수에 따라 처리해야 시간초과가 뜨지 않는다.
✔ D를 처리할 때는 배열의 길이가 0일 때는 에러를 출력해주고 배열의 길이가 0보다 클 때는 curReverse의 홀 / 짝 여부에 따라 홀수인 경우는 뒤에서 제거해줘야하기 때문에 arr.pop()을 짝수인 경우는 arr.shift()를 통해 앞에서 제거처리를 해준다.
❗ 출력과정에서 배열 자체를 출력할 경우 [1, 2, 3] 이런식으로 출력이 되지만 문제에서는 [1,2,3]으로 출력이 되야 정답처리가 된다.
✔ 난이도 : 백준 기준 골드 5