LeetCode - 1021. Remove Outermost Parentheses

henu·2023년 9월 15일
0

LeetCode

목록 보기
78/186

Solution

var removeOuterParentheses = function(s) {
  const stack = [];
  let result = ''

  for(char of s) {
    if(char === '(') {
      stack.push('(')
      if(stack.length > 1) {
        result += '('
      }
    } else {
      stack.pop()
      if(stack.length > 0) {
        result += ')'
      }
    }
  }

  return result;
};

Explanation

stack을 이용하면 크게 어렵지 않게 해결할 수 있다.
문제의 설명 중에 primitive란 빈 문자열이 아니면서, 분열시킬 수 없는 괄호를 뜻한다.
예를 들어, (())()()(()) + () + ()로 나눌 수 있기 때문에 primitive하지 않다. 여기서 나누어진 (()), (), ()은 더 이상 분열시킬 수 없기 때문에 prmitive하다.
최종적으로 문제에서 요구하는 사항은 아래와 같다.

  • 주어진 문자열을 분열시킨 후 각각의 primitive한 괄호의 가장 바깥쪽의 괄호를 제거한 후 합친 결과를 리턴하라

stack을 이용하여 분열시키는 방법은 stack의 길이를 이용하는 것이다.
먼저 열린 괄호(()의 경우
stack의 길이가 1이라는 것은 최외곽의 괄호가 열려있다는 뜻이다. 즉, 우리가 제거해야할 괄호이다. 그리고 1보다 크다는 것은 중첩된 괄호라는 것이다. 따라서 이 경우에만 결과에 추가해주면된다.
그리고 닫힌 괄호())의 경우다.
괄호가 닫혀서 스택에서 제거된 후 길이가 0 일 경우는 최외곽의 괄호가 닫혔다는 것이다. 즉, primitive하고 우리가 제거해야할 괄호이다. 0보다 크다는 것은 중첩된 괄호라는 것이다. 마찬가지로 이 경우일때만 결과에 추가해주면된다.

0개의 댓글