알고리즘
[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"를 추가한 뒤에 출력한다.