JS 알고리즘 문제풀이/섹션 6. 자료구조(스택, 큐)

1.올바른 괄호(스택)

crab. 2022. 6. 22. 08:13

📌강의 정리

괄호가 제대로 성립하지 확인하는 문제이다.

스택이란 자료구조를 사용한다.

반복문으로 문자열을 반복하며 그 문자들을 봐서 ( 일때는 스택에 쌓고

) 일때는 스택에서 ( 를 뺀다.

이때 스택에 아무것도 없는데 ) 가 나오면 괄호가 성립안되므로 NO를 리턴한다.

반복이 끝나고 스택의 길이가 0이면 YES 아니면 NO이다.

 

📌느낀점

알고리즘을 구현하는건 쉬웠지만 문제를 제대로 이해하지못했다.

지금 생각해보면 괄호가 성립되어야 하므로 나중에 ) 가 스택0일때 나오면 NO가 맞고

또 알고리즘짤때도’ ) 가 먼저 나오면 어떻게 처리해야하지’ 를 생각했어야 했는데

그걸 생각못했다..

알고리즘 짤때 짜기전에 미리 생각을 많이 하고 흐름을 만들어둬야 한다.

 

//나의 코드
<html>
  <head>
    <meta charset="UTF-8" />
    <title>출력결과</title>
  </head>
  <body>
    <script>
      function solution(s) {
        let answer = "YES";
        let stk = [];
        for (let x of s) {
          if (x == "(") stk.push(x);
          else stk.pop();
        }
        if (stk.length !== 0) answer = "NO";

        return answer;
      }

      // 반복문을 돌려서 '('를 스택으로 배열에 쌓는다.
      // 이때 ')'가 나오면 스택에서 "("를 빼주고
      // 마지막에 배열내에 데이터가 있는지 확인한다.
      let a = "(()(()))(()";
      console.log(solution(a));
    </script>
  </body>
</html><html>
  <head>
    <meta charset="UTF-8" />
    <title>출력결과</title>
  </head>
  <body>
    <script>
      function solution(s) {
        let answer = "YES";
        stack = [];
        for (let x of s) {
          if (x === "(") stack.push(x);
          else {
            if (stack.length === 0) return "NO";
            stack.pop();
          }
        }
        if (stack.length > 0) return "NO";
        return answer;
      }

      let a = "(()(()))(()";
      console.log(solution(a));
    </script>
  </body>
</html>
//강사님 코드
<html>
    <head>
        <meta charset="UTF-8">
        <title>출력결과</title>
    </head>
    <body>
        <script>
            function solution(arr1, arr2){
                let answer=[];
                let n=arr1.length;
                let m=arr2.length;
                let p1=p2=0;
                while(p1<n && p2<m){
                    if(arr1[p1]<=arr2[p2]) answer.push(arr1[p1++]);
                    else answer.push(arr2[p2++]);
                }
                while(p1<n) answer.push(arr1[p1++]);
                while(p2<m) answer.push(arr2[p2++]); 
                return answer;
            }
            
            let a=[1, 3, 5];
            let b=[2, 3, 6, 7, 9];
            console.log(solution(a, b));
        </script>
    </body>
</html>