코딩테스트 문제풀이/inflearn

[인프런] Node.js / 섹션6-자료구조(스택) / 2. 괄호문자제거

sangchu 2023. 2. 8. 16:24

입력된 문자열에서 소괄호 ( ) 사이에 존재하는 모든 문자를 제거하고 남은 문자만 출력

▣ 입력예제

(A(BC)D)EF(G(H)(IJ)K)LM(N)

▣ 출력예제

EFLM

 

풀이

function solution(s) {
  let answer = "";
  const stack = [];
  for (let x of s) {
    if (x === "(" || (stack.includes("(") && x !== ")")) stack.push(x);
    else if (!stack.includes("(") && x !== ")") answer += x;
    else if (x === ")") {
      if (stack.length === 0) return "잘못된 입력"; // 소괄호도 모든 문자에 속하는거라면 굳이 처리 안해도 될 듯
      let i = 1;
      while (1) {
        if (stack[stack.length - i] === "(") {
          stack.pop();
          break;
        } else {
          stack.pop();
        }
      }
    }
  }
  if (stack.length > 0) return "잘못된 입력";

  return answer;
}

let str = "(A(BC)D)EF(G(H)(IJ)K)LM(N)";
console.log(solution(str));

 

강사 풀이

function solution2(s) {
  let answer;
  let stack = [];
  for (let x of s) {
    if (x === ")") {
      while (stack.pop() !== "("); // '(' 만날때까지 pop
    } else stack.push(x); // ')'가 아니면 push
  }
  answer = stack.join("");
  return answer;
}

let str = "(A(BC)D)EF(G(H)(IJ)K)LM(N)";
console.log(solution2(str));