1차 시도

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\\n');

function run(input: [string, number, ...string[]]) {
  const [string, num, ...commands] = input;
  let cursor = string.length;
  let result = string;

  for (const command of commands) {
    switch (command[0]) {
      case 'L':
        if (cursor !== 0) cursor -= 1;
        break;

      case 'D':
        if (cursor !== string.length) cursor += 1;
        break;

      case 'B':
        if (cursor !== 0) {
          result = result.slice(0, cursor - 1) + result.slice(cursor);
          cursor -= 1;
        }
        break;

      case 'P':
        result =
          result.slice(0, cursor) + command.at(-1) + result.slice(cursor);
        cursor += 1;
        break;

      default:
        break;
    }
  }

  return result;
}

console.log(run(input));

개선


function run(input: [string, number, ...string[]]) {
  const [initialString, num, ...commands] = input;
  const leftStack: string[] = initialString.split('');
  const rightStack: string[] = [];

  for (const command of commands) {
    const isNotEmptyLeftStack = leftStack.length > 0;
    const isNotEmptyRightStack = rightStack.length > 0;

    switch (command[0]) {
      case 'L':
        if (isNotEmptyLeftStack) rightStack.push(leftStack.pop()!);
        break;

      case 'D':
        if (isNotEmptyRightStack) leftStack.push(rightStack.pop()!);
        break;

      case 'B':
        if (isNotEmptyLeftStack) leftStack.pop();

        break;

      case 'P':
        leftStack.push(command.at(-1)!);
        break;

      default:
        break;
    }
  }

  return leftStack.join('') + rightStack.reverse().join('');
}