문제 링크
풀이
const arr = require("fs").readFileSync("/dev/stdin").toString().trim().split("\n");
const open = ["(", "["];
const closed = [")", "]"];
let stack;
const yesno = [];
arr.slice(0, arr.length-1).forEach(v => {
let isNo = false;
stack = [];
for (let i=0; i<v.length; i++) {
if (open.includes(v[i])) stack.push(v[i]);
else if (closed.includes(v[i])) {
if (stack.pop() !== open[closed.indexOf(v[i])]) {
yesno.push("no");
isNo = true;
break;
}
}
}
if (!isNo) {
if (stack.length === 0) yesno.push("yes");
else yesno.push("no");
}
});
console.log(yesno.join("\n"));
문자열을 순회하면서 여는 괄호가 나오면 stack에 push한다. 닫는 괄호가 나오면 pop한 뒤 그 반환값이 짝이 맞는 여는 괄호가 아니면 no를 출력한다. 이 과정이 끝난 뒤에도 (()[], ()[ 이런식의 입력을 받았다면 여는 괄호 하나가 남아 stack이 비어 있지 않을 수 있다. stack이 비어 있으면 yes를 출력, 비어 있지 않으면 no를 출력한다.
'연습장 > 백준(BOJ) 문제풀이' 카테고리의 다른 글
[백준 2606] 바이러스 with Python (0) | 2021.04.20 |
---|---|
[백준 2960] 에라토스테네스의 체 with Node.js (0) | 2021.04.18 |
[백준 1764] 듣보잡 with Node.js (0) | 2021.04.16 |
[백준 11399] ATM with Python (0) | 2021.04.16 |
[백준 1003] 피보나치 함수 with Python (0) | 2021.04.14 |