
문자열이 주어지고 폭발 문자열이 주어진다.
폭발 문자열이 주어질 경우 폭발 문자열이 없어질 때까지 폭발 문자열을 전체 문자열에서 지워준다.
해당 문제는 문자열에서 특정 문자열Trigger이 나온다면 전체 문자열에서 Trigger를 지워주면 되는 문제이다.
따라서 전체 문자열을 스택에 하나씩 넣어주다가 Trigger 문자열의 마지막 부분이 스택에 들어갔을 때 끝 부분을 잘라주면 될 것이다.
구현할 로직의 전체 과정은 다음과 같이 구성했다.
Stack 에 하나씩 push한다.Stack 의 최상단에 들어온 문자가 Trigger 의 마지막과 같다면 가정문 실행slice() 를 이용해 원본 배열을 유지한 채 Stack 의 뒷부분을 잘라낸 후, Trigger 문자열과 비교splice() 를 이용해 원본 배열의 마지막 부분을 잘라낸다.Stack 확인 후 결과를 출력한다. 전체 풀이
let fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
let InputString = input.shift().split('');
let Trigger = input.shift();
let Stack = [];
const solution = (INPUT, ANSWER) => {
for (let i = 0; i < INPUT.length; i++) {
Stack.push(INPUT[i]);
if (Stack[Stack.length - 1] === ANSWER[ANSWER.length - 1]) {
if (Stack.slice(-ANSWER.length).join('') === ANSWER) {
Stack.splice(-ANSWER.length);
}
}
}
return Stack.length ? Stack.join('') : 'FRULA';
};
console.log(solution(InputString,Trigger));
문자열 String의 내장 함수인 slice() 와 splice() 에 대해 다시 한번 생각을 하게 해준 문제였고 문자열에 대해서도 다시 한번 생각을 할 수 있었던 것 같다.