https://www.acmicpc.net/problem/9012
올바른 괄호쌍을 판단하는 방법은 스택을 이용하는 방법이 간단하다.
문자열을 한 글자씩 읽으며 열린 괄호가 나오면 스택에 넣고, 닫힌 괄호가 나오면 스택에서 하나 뺀다. 이때 스택이 비어있으면 올바른 괄호 문자열(VPS)가 아닐거고, 문자열을 다 읽었는데 스택이 비어있지 않는 경우도 VPS가 아닐것이다.
위 경우를 고려하여 코드를 짜려면 닫힌 괄호는 있는데 스택이 비어있는 경우 중간 중단을 나타내는 stop을 써서 표현했고, stack.length를 사용해 스택이 비어있지 않음을 확인했다.
const fs = require("fs");
let [n, ...arr] = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
let stack = [];
let stop = false;
let result = false;
let con = "";
for (let i = 0; i < n; i++) {
// 문장들
stop = false;
stack = []; // 스택 비우기
let str = arr[i];
for (let j = 0; j < str.length; j++) {
// 문장 내부
if (str[j] === "(") {
// 열린 괄호
stack.push(1);
} else {
// 닫힌 괄호
if (stack.length === 0) {
// 스택이 비어있다면
stop = true;
break;
} else {
// 안비어있다면
stack.pop();
}
}
}
if (stack.length !== 0 || stop === true) console.log("NO");
else console.log("YES");
}
설명에 오류가 있거나 이해가 어려운 부분이 있으면 댓글이나 이메일(pigkill40@naver.com)로 문의해 주시면 도움을 드리겠습니다.