WHAT I LEARNED/Algorithm

[javascript] 백준 9012번 괄호

보니bonnie 2022. 3. 10. 10:59
728x90

뭔가 괄호가 우다다다 쏟아져서 살짝 혼미했지만 잘 읽어보니 문제자체는 이해하기가 쉬웠다.

괄호가 여는 괄호[`(`]와 닫는 괄호[`)`]가 짝에 맞게 구성되어있으면 즉, `( )`형태이면 VPS가 되는 것.

짝이 맞는 VPS안에 VPS가 있으면 그것도 VPS가 된다는 말!

 

문제를 통해 `(`와 `)`의 개수가 동일하면 VPS가 되는 것은  쉽게 알 수 있었지만,

이 문제의 주제인 스택으로 구현하는 방법이 고민되었다.

 

 

💡답안

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n');

const Cnt = Number(input[0]); // T

// i번째 줄의 괄호들 정리
  //0번째는 T이므로(=Cnt) i는 1부터 시작
  //갯수는 1번~T번까지이므로 i<= T 
for (let i = 1; i <= Cnt; i++) {
  const bracket = input[i]; //각각의 괄호들
  const stack =  [];
  let result = 'YES'; // 기본 result는 Yes!

  // 각 줄의 괄호들의 VPS 여부 판별
  for (let j = 0; j < bracket.length; j++) {
    if (bracket[j] === '(') {
      stack.push(1);
    } else { //braket[j] === ')'
      // stack에 pop할게 없으면
      if (!stack.pop()) {
        result = 'NO';
        break; //다음 줄의 괄호로 넘어간다!
      } 
    }
  }

  // 모든 연산 후 작업
  // VPS가 되려면 `(`와 `)`의 갯수가 동일해야하므로
  // 위의 push, pop을 거치면 0이 되어야한다.
  if (stack.length !=== 0) {
    result = 'NO';
  }

  // result가 no로 안바뀌는 경우는 다 기본 yes 출력됨 
  console.log(result); 
}

 

📍출처

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

 

9012번: 괄호

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

www.acmicpc.net

 

728x90