seunghyun Note

[백준] 9012번 : 괄호 (스택 공부 부수기) with JS 본문

코딩테스트/프로그래머스

[백준] 9012번 : 괄호 (스택 공부 부수기) with JS

승숭슝현 2024. 1. 18. 15:16

 

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

 

9012번: 괄호

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

www.acmicpc.net

스택문제 여러개 풀고 있다. 

스택 다 풀면 heap 공부할 예정.. heap이 끝나면..? 큐 공부와 우선순위 큐를 공부해야한다. 단계적으로....!

c언어로 구현할때는 링크드리스트로 노드 생성해서 귀찮아서 포기했는데 JS로 선택하길 잘했다.. 

왜 다들 python, js로 코테 공부하라고 하는지 알겠음

문제 풀이

코드를 치면서 함수도 만들고 그 함수를 통해 결과값을 얻는 것이 점점 행복하고 뿌듯했다.

1. n의 크기만큼 문자 배열을 순회시킨다. 

2. 순회하면서 vps 함수를 작동시킨다. 

vps function : 스택 library를 사용하지 않고 전에 프로그래머스에서 풀었을 때처럼 count로 문제를 해결했다.

"("일 경우 ++ 

아닐 경우 --

cnt가 0보다 작다면 바로 false

순회가 끝나고 cnt가 0이면 true 아니면 false

const fs = require("fs");

//const input = require("fs").readFileSync("/dev/stdin").toString().split("\n");
const input = fs.readFileSync("예제.txt").toString().trim().split("\n");
const [n, ...arr] = input;

console.log(n);
console.log(arr);

for (let i = 0; i < n; i++) {
  let str = String(arr[i].split(" "));

  let result = vps(str);
  console.log(result);
}

function vps(str) {
  let stack = 0;
  for (let value of str) {
    if (value === "(") stack++;
    else stack--;
    if (stack < 0) return "NO";
  }
  return stack === 0 ? "YES" : "NO";
}

 

 

 

728x90