문제 번호 : 5430 번
문제 바로가기 ☞ 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("\r\n");
function toAC() {
// 현재 앞 - 뒤 모드
let curMode = "front";
// 1번째 명령어
const opCode = input.shift();
// 2번째 배열 수
const arrLen = input.shift();
// 3번째 배열
let arr = input[0]
.slice(1, input[0].length - 1)
.split(",")
.map(Number);
input.shift();
if (arr.length === 1 && arr[0] === 0) arr.pop();
for (let oper of opCode) {
if (oper == "R") {
curMode = curMode === "front" ? "back" : "front";
} else if (oper == "D") {
if (arr.length === 0) {
console.log("error");
return;
}
if (curMode === "front") {
arr.shift();
} else arr.pop();
}
}
if (curMode === "back") {
arr.reverse();
}
console.log(`[${arr}]`);
}
const N = Number(input.shift());
for (let i = 0; i < N; i++) {
toAC();
}
* N의 개수가 10만개라서 분명히 시간초과가 있을것이라 생각했습니다.
때문에 'R' 마다 reverse를 한다면 시간초과가 되겠는데? 라는 생각을 하였고, 'R'을 입력하면 현재의 Mode를 바꾸어서 front 상태일땐 앞에서, back 상태일땐 뒤에서 뽑아주도록 구현 하였습니다.
그런 후 마지막의 Mode 상태가 back이라면 딱 한번 reverse를 사용하여 배열을 뒤집은 후 출력해주면 최적화가 됩니다.
도움이 되셨다면 공감 부탁드립니다.