[javascript] 백준 2504번 괄호의 값

bjyyyyy·2022년 12월 19일
0

문제보기

let input = fs.readFileSync(filePath).toString().trim().split("");

let stack = [];

if (input.length % 2 !== 0) {
    console.log(0);
    return;
}

for (let i = 0; i < input.length; i++) {
    if (input[i] === "(" || input[i] === "[") {
        stack.push(input[i]);
    } else if (input[i] === ")") {
        if (stack[stack.length - 1] === "(") {
            stack.pop();
            stack.push(2);
        } else {
            let count = 0;
            while (true) {
                let last = stack.pop();
                if (last === "[" || undefined) {
                    console.log(0);
                    return;
                }
                if (typeof last === "number") {
                    count += last;
                } else {
                    count *= 2;
                    break;
                }
            }
            stack.push(count);
        }
    } else if (input[i] === "]") {
        if (stack[stack.length - 1] === "[") {
            stack.pop();
            stack.push(3);
        } else {
            let count = 0;
            while (true) {
                let last = stack.pop();
                if (last === "(" || undefined) {
                    console.log(0);
                    return;
                }
                if (typeof last === "number") {
                    count += last;
                } else {
                    count *= 3;
                    break;
                }
            }
            stack.push(count);
        }
    } else {
        console.log(0);
        return;
    }
}

let result = stack.reduce((a, b) => a + b);

if (typeof result === 'number') {
  console.log(result)
} else {
  console.log(0)
}

풀이

닫는 괄호가 나올때 그에 맞는 여는 괄호가 나올때까지 스택에서 pop하면서 그 사이에 나오는 숫자들을 더해주고 괄호에 맞는 수를 곱해서 스택에 다시 push해주면 된다

예외처리로는
1.닫는괄호에 맞지않는 여는괄호가 중간에 나올경우
2.스택이 비어서 undefined가 나올경우
3.입력으로 주어지는 값의 갯수가 홀수일경우
4.결과로 출력하는 값의 타입이 number가 아닐경우

4가지 정도가 있다.

특히 4번케이스를 찾지 못해서 90%에서 계속 틀렸다고 나와서 찾는데 많은 시간이 걸렸다.

0개의 댓글