문자열 폭발 문자열 폭발

[Node] 백준 9935 – 문자열 폭발

어떤 문자열이 주어지면 폭발 문자열을 감지하여 삭제하고, 모두 삭제한 후 남은 문자 (없으면 FRULA)를 출력하는 문제이다.

단순 replace로 접근하기

let [wa, pas] = require('fs').readFileSync(0, 'utf8').trim().split('\n');
while (wa.includes(pas)) {
  wa = wa.replace(pas, '') || 'FRULA';
}
console.log(wa);

처음에 시도한 코드는 이렇다. 정규식으로는 안 되는 문제고, 무식하게 해당 문자가 모두 제거될 때까지 String.prototype.replace()를 호출한다.

물론 이걸로 됐다면 문제 티어가 골드 4일 리가 없는 관계로 방법은 맞으나 시간 초과가 떴다.

스택 이용하기

머리로 생각해본 작동 로직은 이렇다.

  1. 일단 문자열을 받아서 배열 (스택)을 만들고 문자를 하나하나 추가한다.
  2. 동시에 폭발 문자열의 길이만큼 뒤에서 잘라서 일치하는지 확인한다.
  3. 일치한다면 그 길이만큼 다시 반복문을 돌려 스택을 pop() 처리한다.
let [wa, pas] = require('fs').readFileSync(0, 'utf8').trim().split('\n');
const wapas = [];
const len = pas.length;

for (let i = 0; i < wa.length; i++) {
  wapas.push(wa[i]);
  if (wapas.slice(-len).join('') === pas) {
    for (let j = 0; j < len; j++) {
      wapas.pop();
    }
  }
}

console.log(wapas.join('') || 'FRULA');

이후 스택에 있는 문자들을 하나하나 합쳐서 출력해주면 된다. Array.prototype.join() 메소드는 결과물이 없는 경우 빈 문자를 반환하고, 이는 falsy value이기 때문에 OR 연산자를 사용하여 빈 문자면 문제 조건에 맞게 FRULA를 대신 출력한다.

맞았다!
맞았다!
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x