수식 최대화

발자·2022년 9월 26일
0

programmers

목록 보기
13/34
import re
from itertools import * 

def solution(expression):
    # 사용된 연산자 리스트 생성
    operations = [i for i in expression if (i in ['+', '-', '*'])]
    # 연산자의 순열 리스트 생성
    permut = list(permutations(list(set(operations))))
    # 초기값 = 0
    answer = 0
    # 순열 리스트마다 연산자별로 우선 계산하여 저장
    for order in permut :
        exp = expression
        for operation in order :
            # 계산할 구간 찾기
            exs = re.compile('(?:(?:\(\-)?\d+\)?' + '\\' + operation + ')+(?:\(\-)?\d+\)?').findall(exp)
            # 계산된 값으로 교체
            for ex in exs :
                x = eval(ex)
                if x < 0 :
                    x = '(' + str(x) + ')'
                else :
                    x = str(x)
                exp = exp.replace(ex, x)
        # 더 큰 값으로 변경
        if answer < abs(eval(exp)):
            answer = abs(eval(exp))
    return answer

🧩 eval() 함수는 보안상 문제가 발생할 수도 있다고 한다. 되도록이면 사용하지 않는 방향으로 코드를 짜야겠다.

0개의 댓글