연습장/백준(BOJ) 문제풀이
[백준 4949] 균형잡힌 세상 with Node.js
Tesseractjh
2021. 4. 17. 15:42
문제 링크
4949번: 균형잡힌 세상
하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마
www.acmicpc.net
풀이
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를 출력한다.