Problem link
https://leetcode.com/problems/basic-calculator/
Problem Summary
괄호, +, - 가 있는 간단한 계산기를 만드는 문제.
Solution
스택으로 하면 될 것 같다.
기본 기호 (+, -) 가 나오면 스택에 집어넣고, 괄호가 나오면 새로 스택을 쌓아주고 괄호가 닫히면 스택에서 하나를 더 빼주는 식으로 구현했다.
약간 코드가 지저분하지만 기본 흐름은 스택을 쓰는 것이다.
Source Code
class Solution:
def calculate(self, s: str) -> int:
num_stack = [0]
op_stack = [1]
num = 0
s = '(' + s + ')'
for i in range(len(s)):
if s[i].isdigit():
num = num * 10 + int(s[i])
elif s[i] == '+':
op = op_stack.pop()
num_stack[-1] += num * op
op_stack.append(1)
num = 0
elif s[i] == '-':
op = op_stack.pop()
num_stack[-1] += num * op
op_stack.append(-1)
num = 0
elif s[i] == '(':
num_stack.append(0)
op_stack.append(1)
elif s[i] == ')':
op = op_stack.pop()
num_stack[-1] += num * op
op = op_stack.pop()
n = num_stack.pop()
num_stack[-1] += n * op
op_stack.append(1)
num = 0
return num_stack[0]