def solution(expression):
from functools import reduce
import re
#세 개의 연산자가 있을 때 경우의 수
cal1=[['*','+','-'],['*','-','+'],['+','*','-'],['+','-','*'],['-','+','*'],['-','*','+']]
s=expression
#세 종류의 연산자가 주어질 때 연산하기
def func3(A,s):
for i in re.split('['+str(A[1])+str(A[2])+']',s):
if A[0] in i:
s=s.replace(i,str(eval(A[0].join([str(n) for n in i.split(A[0])]))))
for i in re.split('['+str(A[2])+']',s):
if A[1] in i:
s=s.replace(i,str(eval(A[1].join([str(n) for n in i.split(A[1])]))))
return abs(eval(A[2].join([str(n) for n in s.split(A[2])])))
#두 종류의 연산자가 주어질 때 연산하기
def func2(A,s):
for i in re.split('['+str(A[1])+']',s):
if A[0] in i:
s=s.replace(i,str(eval(A[0].join([str(n) for n in i.split(A[0])]))))
return abs(eval(A[1].join([str(n) for n in s.split(A[1])])))
#한 종류의 연산자가 주어질 때 연산하기
def func1(A,s):
return abs(eval(A.join([str(n) for n in s.split(A)])))
#연산자가 몇 종류 있는지 알아보기
cal0=[]
if '-' in s:
cal0.append('-')
if '+' in s:
cal0.append('+')
if '*' in s:
cal0.append('*')
#계산된 값들 중 최대값 반환하기
b=[]
if len(cal0)==3:
for a in cal1:
b.append(func3(a,s))
return max(b)
if len(cal0)==2:
for a in [cal0[::-1],cal0]:
b.append(func2(a,s))
return max(b)
if len(cal0)==1:
return func1(cal0[0],s)