let input = fs.readFileSync(filePath).toString().trim().split("\n");
let check = input[0].split("");
let signal = input[1].split("");
let signalLength = input[1].length;
let stack = [];
for (let i = 0; i < check.length; i++) {
let input = check[i];
if (signal[signal.length - 1] === input) {
let checkSignal =
signalLength > 1
? stack.slice(-(signalLength - 1), stack.length)
: "";
if (
JSON.stringify([...checkSignal, input]) === JSON.stringify(signal)
) {
for (let i = 0; i < signalLength - 1; i++) {
stack.pop();
}
} else {
stack.push(input);
}
} else {
stack.push(input);
}
}
if (stack.length) {
console.log(stack.reduce((a, b) => a + b));
} else {
console.log("FRULA");
}
풀이
문자열 맨앞부터 문자를 하나씩 뽑아서 해당 문자가 폭발 문자열의 맨뒷 문자와 같은지 확인한다
같으면 폭발 문자열의 길이 - 1 만큼 스택에서 뒤에서부터 slice해서 뽑은 문자와 더한 뒤 폭발 문자열과 같은지 확인한다
같으면 폭발 문자열의 길이 - 1 만큼 반복문을 실행하여 stack에서 pop해준다
다르면 stack에 뽑은 문자를 push 해준다
let checkSignal =
signalLength > 1
? stack.slice(-(signalLength - 1), stack.length)
: "";
해당부분은 폭발문자열의 길이가 1보다 큰게 아니면 굳이 stack에서 slice할 이유가 없기 때문이다.