먼저, permutation을 이용하여 가능한 모든 연산자의 우선순위 배열을 구합니다.
operators = list(permutations(['-', '*', '+']))
#[('-', '*', '+'), ('-', '+', '*'), ('*', '-', '+'), ('*', '+', '-'), ('+', '-', '*'), ('+', '*', '-')]
모든 연산자 우선순위 배열을 순회하면서, 각 배열의 연산자들과 숫자를 연산합니다.
이때, while문으로 연산자 우선순위가 우선인 연산자들이 전부 연산 된 후, 다음 우선순위의 연산자가 연산되게 합니다. 연산은 문자열 식을 받아 숫자로 리턴하는 eval 함수를 사용합니다.
예를들어, ["200", "+", "100"] 이 있으면, + 연산자의 인덱스를 구해, 앞과 뒤 숫자를 연산한 뒤 앞 숫자 자리에 넣습니다. 이후 연산자 자리와 연산자 뒤 숫자는 삭제합니다.
이 과정을 반복하면, results에는 결과값들만 남게 되는데, 그 중 max값을 출력하면 됩니다.
from itertools import permutations
import re
def solution(expression):
expression = re.split('([*+-])', expression)
operators = list(permutations(['-','*','+']))
results = []
for operator in operators:
exp = expression.copy()
for op in operator:
while op in exp:
idx = exp.index(op)
exp[idx-1] = str(eval(exp[idx-1] + exp[idx] + exp[idx+1]))
del exp[idx:idx+2]
results.append(abs(int(exp[0])))
return max(results)
아래의 영상을 참고했습니다.