26.올바른 괄호 - Stack

Updated:


올바른 괄호

🔍 문제

괄호가 입력되면 올바른 괄호이면 “YES”, 올바르지 않으면 ”NO”를 출력합니다.

(())() 이것은 괄호의 쌍이 올바르게 위치하는 거지만, (()()))은 올바른 괄호가 아니다.

🔹 입력설명

첫 번째 줄에 괄호 문자열이 입력됩니다. 문자열의 최대 길이는 30이다.

🔹 출력 설명

첫 번째 줄에 YES, NO를 출력한다

🔹 입력예제 1

(()(()))(()

🔹 출력 예제 1

NO


📌 풀이

11

22

33


<head>
  <meta charset="UTF-8">
  <title>출력결과</title>
</head>

<body>
  <script>
    function solution(s) {
      let answer = "YES"
      let stack = [];
      for(let x of s) { 
        if(x === '(') stack.push(x); // x 가 ( 일때는 stack 에 push 넣음
        else { // 아닐경우 ) 괄호 일경우
          if(stack.length === 0) return "NO" // 뺄려고 했는데 stack 이 비어 있으면 바로 No return
          stack.pop(); // stack 에서 최근에 더한 ( 를 빼줌
        }
      }
      if(stack.length > 0) return "NO"; // ( 가 많은 상황 -> for loop 를 다 끝나도 stack 에 뭔가 남아 있으면 No return
      return answer;
    }

    let a = "(()(()))(()";
    console.log(solution(a));
  </script>
</body>

Leave a comment