text: """
      https://leetcode.com/problems/basic-calculator/
      224. Basic Calculator (hard)
  
      [풀이방법]
      stack을 이용한 풀이방법
      digit: 다음문자가 숫자가 아닐때까지 탐색하며 숫자생성
      (: 이전까지 계산된 숫자를 스택에 저장 & sign을 스택에 저장
      ): 스택에서 sign을 pop하고 괄호안에서 연산된 결과에 붙여주고, 결과 값을 더함
      +: sign 값을 1로 설정
      -: sign 값을 -1로 설정 
  """
  
  class Solution:
      def calculate(self, s: str) -> int:
          cal_stack = []
          length = len(s)
          sign = 1
          num = 0
          ans = 0
  
          i = 0
          while i < length:
              if s[i].isdigit():
                  num = int(s[i])
                  while i + 1 < length and s[i+1].isdigit():
                      num = num * 10 + int(s[i+1])
                      i = i + 1
                  num = num * sign
                  ans = ans + num
                  num = 0
              elif s[i] == '(':
                  cal_stack.append(ans)
                  cal_stack.append(sign)
                  ans = 0
                  sign = 1
              elif s[i] == ')':
                  pre_sign = cal_stack.pop()
                  ans = ans * pre_sign
                  pre_ans = cal_stack.pop()
                  ans = ans + pre_ans
              elif s[i] == '+':
                  sign = 1
              elif s[i] == '-':
                  sign = -1
              
              i = i + 1
  
          return ans
  
  s = Solution()
  print(s.calculate("(1+(4+55+2)-3)+(6+8)"))
          