문제 번호 : 1406번
문제 바로가기 ☞ https://www.acmicpc.net/problem/1406
<<< 문제 내용 >>>
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().trim().split('\n');
let front = input[0].split('');
let back = [];
const num = Number(input[1]);
let textlength = front.length;
let arr = [];
for(let i=0; i<2+num; i++){
arr.push(input[i].split(' '));
}
for(let i=2; i<2+num; i++){
switch(arr[i][0]){
case 'L':
if(textlength>0){
back.push(front.pop());
textlength--;
}
break;
case 'D':
if(back.length > 0){
front.push(back.pop());
textlength++;
}
break;
case 'B':
if(textlength>0){
front.pop();
textlength--;
}
break;
case 'P':
front.push(arr[i][1]);
textlength++;
break;
}
}
back.reverse();
console.log(front.join('')+back.join(''));
* 이 문제는 시간초과에 유념해야 합니다.
해결 방법은 우선 커서의 위치를 기준으로 front배열과 back배열을 둡니다.
커서가 왼쪽으로 이동하면 front.pop()으로 back 배열에 넣어주고,
커서가 오른쪽으로 이동하면 back.pop()으로 front배열로 이동시킵니다.
위 방식대로 진행 후 front와 back을 합친 것이 답이되는데
이때, back을 한번 뒤집어 주어야 원하는 대로 출력이 가능합니다.
도움이 되셨다면 공감 부탁드립니다.