https://www.acmicpc.net/problem/5430
골드 5문제인데 브론즈 문제같은 문제였다.
내용은 입력으로 들어온 (R: 배열 뒤집기, D: 삭제) R혹은D를 수행하는것이다.
입력
- 첫줄: 테스트케이스 T
- 1 + 1n줄: R,D로 이뤄진 함수 배열 p
- 1 + 2n줄: p에 들어있는 숫자의 개수 n
- 1 + 3n줄: 1~100 사이의 정수
👀 p+n은 70만을 넘지 않는다.
출력
- p에 들어있는 연산을 수행한 결과를 출력한다.
- 만약 D 수행도중 배열이 비었다면 error를 수행한다.
풀이방법은 간단했다.
1. R을 수행한다면 output *= -1을 실행한다.
2. D를 수행할 때 output이 -1이면 맨왼쪽을 제거, 1이면 맨오른쪽을 제거한다.
3. 만약 output이 -1이라면 배열을 그대로, 1이라면 배열을 뒤집어서 출력해준다.
const stdin = (process.platform ==='linux'
? require('fs').readFileSync(0, 'utf-8')
: ``).trim().split('\n');
const input = (()=>{
let line = 0;
return ()=> stdin[line++];/
})();
let answer = '';
const testCase = +input();
for (let i=0; i<testCase; i++) {
const funcs = input().split("");
const len = +input();
let nums = input().slice(1, -1).split(",").filter(v => v !== '').map(Number);
// -1: 왼쪽
// 1 : 오른쪽
let output = -1;
let isError = false;
for (let i=0; i<funcs.length; i++) {
if (funcs[i] === 'R') {
output *= -1;
continue;
}else {
if (nums.length === 0) {
isError = true;
break;
}
if (output === -1) {
nums.shift();
}else {
nums.pop();
}
}
}
if (output === 1) {
nums.reverse();
}
if (isError) {
answer += `error\n`;
}else{
answer += `[${nums.join(",")}]\n`;
}
}
console.log(answer);