알고리즘

[BOJ]4949 - 균형잡힌 세상(JS)

로돌씨 2024. 8. 13. 17:52

 

풀이

let fs = require("fs");
let input = fs.readFileSync('예제.txt').toString().trim().split("\n");
let ans = [];

for (let x of input) {
    if (x === ".") {
        break;
    }
    let stack = [];
    let isBalanced = true;
    
    for (let i = 0; i < x.length; i++) {
        if (x[i] === "(" || x[i] === "[") {
            stack.push(x[i]);
        } else if (x[i] === ")") {
            if (stack.length === 0 || stack.pop() !== "(") {
                isBalanced = false;
                break;
            }
        } else if (x[i] === "]") {
            if (stack.length === 0 || stack.pop() !== "[") {
                isBalanced = false;
                break;
            }
        }
    }

    if (isBalanced && stack.length === 0) {
        ans.push("yes");
    } else {
        ans.push("no");
    }
}

// 최종 결과 출력
console.log(ans.join("\n"));

isBalanced를 통해 yes인지 no인지 판단한다.

괄호가 나왔을때 만약 "("거나 ,  "[" 라면 스택에 괄호를 추가한다.  닫는 괄호가 나온다면 마지막 스택에 담겨있는 괄호가 소괄호인지 중괄호인지 판단한 다음 맞는 쌍이라면 isBalanced는 true로 유지된다 , 하지만 닫는 괄호가 나왔을때에 stack에 담겨져있는 소괄호나 중괄호가 없거나 stack.pop() 즉 스택의 맨 마지막 요소가 맞는 괄호가 아니라면 isBalanced는 false로 지정되고 break 한다.

 

만약 isBalanced가 true거나 stack 의 길이가 0이라면 (모두 쌍이 맞아 모든 괄호가 사라진 상태) ans배열에 "yes"를 추가하고 아니라면 "no"를 추가한 뒤에 출력한다.

'알고리즘' 카테고리의 다른 글

[BOJ] 11050 - 이항계수1(JS)  (0) 2024.09.19
[BOJ]28279 - 덱2(JS)  (0) 2024.08.13
[BOJ]28278 - 스택2(JS)  (0) 2024.07.30
[BOJ]4948 - 베르트랑 공준(JS)  (0) 2024.07.25
[BOJ]4134 - 다음소수 (JS)  (1) 2024.07.23