[백준/JS] 9012번 - 괄호

Pakxe·2022년 10월 12일
0

PS

목록 보기
2/16
post-thumbnail

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)로 문의해 주시면 도움을 드리겠습니다.

0개의 댓글

관련 채용 정보