Skip to content

224. Basic Calculator

#173

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]