캐또's coding

9012 - 괄호 - node.js 본문

기초 공부/백준 문제 풀이

9012 - 괄호 - node.js

JS_K_coding 2023. 1. 23. 12:22

https://www.acmicpc.net/problem/9012

 

9012번: 괄호

괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고

www.acmicpc.net


해당 문제는 스택으로도 해결 가능한 문제다. 괄호 (와 )가 주어질 때 맞아 떨어지는지를 확인하는 문제로

스택을 사용해서 (를 하나씩 넣고 )가 올때 (를 하나씩 빼주면 된다. 만약 (가 없는데 )가 오면 대응되지 않는 괄호이므로 NO로 바로 가면 된다.

여기서는 숫자로 + -하는 것으로 해결했다

const fs = require("fs");
let [n, ...input] = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
const result = [];
let stack = 0;
//스택을 숫자 기본으로 둔다.

for (i = 0; i < n; i++) {
  let arr = input[i].trim().split("");
//각 줄을 한 글자 단위로 쪼개준다.

  for (j = 0; j <= arr.length; j++) {
    if (stack < 0) break;
    //만약 stack이 음수가 되면 멈춘다 => NO가 되도록
    
    if (arr[j] === "(") {
      stack += 1;
      // (가 들어왔을 때 +1을 한다.
    } else if (arr[j] === ")") {
      stack -= 1;
      // )가 들어 왔을 때 -1을 한다.
    }
  }
  if (stack === 0) {
    result.push("YES");
    //만약 스택이 0이라면 YES다.
  } else {
    result.push("NO");
    //만약 그렇지 않은 경우라면 모두 NO다.
  }
  stack = 0;
  //한 줄 반복문을 돌고나서 stack을 초기화한다.
  result.push("\n");
  //결과값에 줄넘김을 넣는다.
}
console.log(result.join(""));
//결과 출력하면 끝

만약 같은 문제를 스택으로 해결하려면, 스택에 (를 넣고 )가 왔을 때 빼기, 만약 스택이 비었는데 )가 왔다면 바로 NO라는 식으로 코드를 수정하면 된다.

'기초 공부 > 백준 문제 풀이' 카테고리의 다른 글

1874 - 스택 수열 - node.js  (0) 2023.01.24
9093 - 단어 뒤집기 - node.js  (0) 2023.01.22
10828 - 스택 - node.js  (0) 2023.01.21
24060 - 알고리즘 수업 - node.js  (0) 2023.01.20
25501 - 재귀의 귀재 - node.js  (0) 2023.01.19
Comments