파이썬 알고리즘-109 (프로그래머스) 수식 최대화

jiffydev·2021년 2월 9일
0

Algorithm

목록 보기
116/134

코드

다른 사람의 풀이

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 메소드를 사용해 문자열끼리 계산할 수 있도록 하였다.

profile
잘 & 열심히 살고싶은 개발자

0개의 댓글