문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/67257
핵심
from itertools import permutations
import re
def solution(expression):
numbers = [int(i) for i in re.sub("[^0-9]", " ", expression).split(" ")]
operators = list(re.sub("[0-9]", "", expression))
setOperators = set(operators)
maxValue = 0
#연산자 우선순위 경우의 수에 따라 계산한 결과로 최대값 갱신
for priority in permutations(setOperators, len(setOperators)):
result = calculate(numbers.copy(), operators.copy(), list(priority))
maxValue = max(maxValue, result)
return maxValue
def calculate(numbers, operators, priority):
targetOp = priority.pop(0)
#연산자 배열이 빌 때까지 진행
while operators:
#현재 우선순위 연산자가 존재할 때까지
#연산자 양 옆 두 수를 꺼내어 계산하고 다시 넣음
if targetOp in operators:
idx = operators.index(targetOp)
op = operators.pop(idx)
num1 = numbers.pop(idx)
num2 = numbers.pop(idx)
if op == '*':
numbers.insert(idx, num1 * num2)
elif op == '+':
numbers.insert(idx, num1 + num2)
else:
numbers.insert(idx, num1 - num2)
else:
targetOp = priority.pop(0)
return abs(numbers[0])