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

2.괄호 문자 제거(스택)

crab. 2022. 6. 23. 07:39

📌강의 정리

문자열 내의 괄호안의 문자들을 전부 제거하는 문제였다.

for문을 돌리며 문자들을 계속 스택에 쌓다가 “)”를 만나면 “(”까지의 모든 스택에 쌓인

모든 문자들을 pop해준다.

 

📌느낀점

이번에는 복잡도로만 따지면 내 풀이가 조금 더 괜찮지 않나? 하는 생각도 살짝 들기는 한다.

스택에 와서는 알고리즘 실력이 조금 늘어서인지 아직 여유가 있는 것 같다. 좋다.

 

//나의 코드
<html>
  <head>
    <meta charset="UTF-8" />
    <title>출력결과</title>
  </head>
  <body>
    <script>
      function solution(s) {
        let answer = "";
        let stack = [];
        for (let x of s) {
          if (stack.length === 0 && x !== "(") answer += x;
          if (x === "(") stack.push(x);
          else if (x === ")") stack.pop();
        }
        return answer;
      }
      // 스택을 만들어서 "("가 나오면
      // 그걸 스택에 쌓고 ")"가 나오기 전까지의
      // 문자들은 계속 없애준다.
      // "("가 스택에 쌓인만큼 ")"가 나와서 스택이 비어있을경우
      // 문자들을 출력한다.
      let str = "(A(BC)D)EF(G(H)(IJ)K)LM(N)";
      console.log(solution(str));
    </script>
  </body>
</html>
//강사님 코드
<html>
  <head>
    <meta charset="UTF-8" />
    <title>출력결과</title>
  </head>
  <body>
    <script>
      function solution(s) {
        let answer;
        let stack = [];
        for (let x of s) {
          if (x === ")") {
            while (stack.pop() !== "(");
          } else stack.push(x);
        }
        answer = stack.join("");
        return answer;
      }

      let str = "(A(BC)D)EF(G(H)(IJ)K)LM(N)";
      console.log(solution(str));
    </script>
  </body>
</html>