풀이
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 |