[백준] 5430 AC - javascript

Yongwoo Cho·2022년 4월 3일
0

알고리즘

목록 보기
72/104
post-thumbnail
post-custom-banner

📌 문제

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

profile
Frontend 개발자입니다 😎
post-custom-banner

0개의 댓글