from itertools import permutations
def calc(priority, n, expression):
if n == 2:
return str(eval(expression))
res = eval(priority[n].join([calc(priority, n+1, e) for e in expression.split(priority[n])]))
return str(res)
def solution(expression):
answer = 0
priorities = list(permutations(['+','*','-']))
for priority in priorities:
res = int(calc(priority, 0, expression))
answer = max(answer, abs(res))
return answer
이 문제에 대한 풀이는 이 블로그를 참고하였다.
연산의 우선순위는 itertools 모듈의 permutaion 메소드를 사용해서 모든 경우를 구했다. 한 우선순위 튜플은 왼쪽이 우선순위가 낮고 오른쪽이 우선순위가 높다.
그래서 calc 함수를 실행하면 낮은 우선순위의 연산은 split()으로 먼저 제외되고 재귀적으로 이를 반복하여, 우선순위가 가장 높은 연산부터 계산한 후 값을 리턴한다.
이 때 연산하는 방법은 join으로 숫자와 연산자를 붙인 후 eval 메소드를 사용해 문자열끼리 계산할 수 있도록 하였다.