해커톤 대회에 참가하는 모든 참가자들에게는 숫자들과 3가지의 연산문자(+,-,*)만으로 이루어진 연산수식이 전달되며, 수식에 포함된 연산자의 우선순위를 자유롭게 재정의하여 만들 수 있는 가장 큰 숫자를 제출하는 것입니다.
단, 연산자의 우선순위를 새로 정의할 때, 같은 순위의 연산자는 없어야 합니다.
만약 계산된 결과가 음수라면 해당 숫자의 절대값으로 변환하여 제출하며 제출한 숫자가 가장 큰 참가자를 우승자로 선정하며, 우승자가 제출한 숫자를 우승상금으로 지급합니다.
from itertools import permutations
from copy import deepcopy
def solution(expression):
answer = 0
number, operand = [], []
i = 0
for index, ex in enumerate(expression):
if ('0'<=ex<='9') == False :
operand.append(ex)
number.append(int(expression[i:index]))
i = index+1
number.append(int(expression[i:]))
for per in list(permutations(['+','-','*'],3)):
tn, to = deepcopy(number), deepcopy(operand)
for op in per:
i = 0
while True:
if i == len(to): break
if to[i] == op:
tn[i] = cal(op,tn[i],tn[i+1])
tn.pop(i+1)
to.pop(i)
else:
i += 1
answer = max(answer, abs(tn[0]))
return answer
def cal(op, a, b):
if op == '+': return a+b
elif op == '-': return a-b
else: return a*b