https://programmers.co.kr/learn/courses/30/lessons/67257
레벨 3보다 어려웠다..;
+,-,* 3가지 연산자의 경우의 수에 따라 calculate함수를 수행했다.
calculate함수는 수식과 연산자를 받아 +,-,* 순이라면 해당 순서에 따라 연산을 수행한다.
일단 주어진 문자열을 ['100', '-', '200', ' * ', '300', '-', '500', '+', '20'] 와 같이 만든다. (array)
그리고 스택 자료구조를 활용해 해당 연산자를 만났을때 계산함수를 수행한다. 그리고 계속 array를 갱신해간다.
from itertools import permutations
def operation(num1, num2, op):
if op == '+':
return str(int(num1) + int(num2))
if op == '-':
return str(int(num1) - int(num2))
if op == '*':
return str(int(num1) * int(num2))
def calculate(exp,op):
array=[]
tmp=""
for i in exp:
if i.isdigit()==True:
tmp+=i
else:
array.append(tmp)
array.append(i)
tmp=""
array.append(tmp)
for o in op:
stack=[]
while len(array)!=0:
tmp=array.pop(0)
if tmp==o:
stack.append(operation(stack.pop(), array.pop(0), o))
else:
stack.append(tmp)
array=stack
return abs(int(array[0]))
def solution(expression):
op = ['+', '-', '*']
op = list(permutations(op, 3))
result=[]
for i in op:
result.append(calculate(expression, i))
return max(result)