====== 문제제목 ====== ===== 풀이 ===== * 세가지 연산자의 가능한 우선순위는 총 3!=6가지이다. 그냥 이 6가지 조합에 대해서 전부 식을 계산해보고 최댓값을 구하면 된다. * 식을 계산하는 것은 스택을 써서 정석적으로 구현할 수도 있지만, 식의 형태가 단순하기 때문에, 그냥 연산자를 갖고서 문자열을 split한 뒤에, 분할된 각 문자열들에 대해서 다시 재귀적으로 값을 계산하고 마지막에 합쳐주는 방법으로도 충분하다. * eval을 쓰면 더 간단하게도 구현 가능하지만 eval은 최대한 쓰지 않기로 했기 때문에 그 방법은 패스 ===== 코드 ===== """Solution code for "Programmers 67257. 수식 최대화". - Problem link: https://programmers.co.kr/learn/courses/30/lessons/67257 - Solution link: http://www.teferi.net/ps/problems/programmers/67257 """ import functools import itertools import operator OPERATORS = (('*', operator.mul), ('+', operator.add), ('-', operator.sub)) def solve(expression, operators, i): if expression.isdigit(): return int(expression) symbol, op = operators[i] sub_expressions = expression.split(symbol) return functools.reduce( op, (solve(x, operators, i + 1) for x in sub_expressions)) def solution(expression): return max( abs(solve(expression, p, 0)) for p in itertools.permutations(OPERATORS)) {{tag>프로그래머스 ps:problems:programmers:Level_2}}