LeetCode 솔루션					분류
				
						[11/20] 224. Basic Calculator
본문
Hard
4893367Add to ListShareGiven a string s representing a valid expression, implement a basic calculator to evaluate it, and return the result of the evaluation.
Note: You are not allowed to use any built-in function which evaluates strings as mathematical expressions, such as eval().
Example 1:
Input: s = "1 + 1" Output: 2
Example 2:
Input: s = " 2-1 + 2 " Output: 3
Example 3:
Input: s = "(1+(4+5+2)-3)+(6+8)" Output: 23
Constraints:
- 1 <= s.length <= 3 * 105
- sconsists of digits,- '+',- '-',- '(',- ')', and- ' '.
- srepresents a valid expression.
- '+'is not used as a unary operation (i.e.,- "+1"and- "+(2 + 3)"is invalid).
- '-'could be used as a unary operation (i.e.,- "-1"and- "-(2 + 3)"is valid).
- There will be no two consecutive operators in the input.
- Every number and running calculation will fit in a signed 32-bit integer.
Accepted
354,605
Submissions
841,931
관련자료
- 
			링크
			댓글 1
					
			학부유학생님의 댓글
- 익명
- 작성일
					
										
					Runtime: 229 ms, faster than 42.49% of Python3 online submissions for Basic Calculator.
Memory Usage: 18.1 MB, less than 9.85% of Python3 online submissions for Basic Calculator.
				
													
								Memory Usage: 18.1 MB, less than 9.85% of Python3 online submissions for Basic Calculator.
class Solution:
    def calculate(self, s: str) -> int:
        s = list(s)
        stack = []
        
        def calc(op, num):
            if op == "+":
                stack.append(num)
            elif op == "-":
                stack.append(-num)
        
        operators = ["+","-"]
        op = "+"
        num = 0
        
        for char in s+["+"]:
            
            if char in operators:
                calc(op, num)
                op = char
                num = 0
            elif char.isdigit():
                num = num*10 + int(char)
            
            elif char == "(":
                stack.append(op)
                op = "+"
                num = 0
                
            elif char == ")":
                calc(op, num)
                op = "+"
                num = 0
                temp = 0
                while stack[-1] not in operators:
                    temp += stack.pop()
                
                temp_op = stack.pop()
                calc(temp_op, temp)
                
        return sum(stack) 
								 
							







