[javascript] 백준 9935번 문자열 폭발

bjyyyyy·2022년 12월 19일
0

문제보기

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할 이유가 없기 때문이다.

0개의 댓글