/ ALGORITHM

(프로그래머스 with python) 수식 최대화


Level2 - 수식 최대화

https://programmers.co.kr/learn/courses/30/lessons/67257


다시 풀어보아야 할 문제중 하나이다. 조건을 나누어서 생각해야 하는데 생각보다 쉽지 않다. 일단 지문이 길면 겁부터 먹는것 같다…

주의할 점

  • 문자열 안에 담긴 숫자와 부호를 같은 리스트에 하나의 요소로 넣어야 한다.

  • 숫자와 부호의 위치는 항상 정상적으로 나온다는 것을 생각하자 ex) 3 + - 4 + .. 이런 경우는 없음 !

from itertools import permutations


def operation(n1, n2, op):
    if op == '+':
        return str(int(n1) + int(n2))
    if op == '-':
        return str(int(n1) - int(n2))
    if op == '*':
        return str(int(n1) * int(n2))
    
    
def calc(express, op):
    _express = express.copy()
    tmp = ''
    for o in op:
        stack = []
        while len(_express) != 0:
            tmp = _express.pop(0)
            if tmp == o:
                stack.append(operation(stack.pop(), _express.pop(0), o))
            else:
                stack.append(tmp)
        _express = stack
        
    return abs(int(_express[0]))


def solution(expression):
    oper = ['+', '-', '*']
    oper_li = list(permutations(oper, 3))
    express = []
    tmp = ''
    answer = []
    
    for i in expression:
        if i.isdigit():
           tmp += i
        else:
            express.append(tmp)
            express.append(i)
            tmp = ''
    express.append(tmp)
        
    for op in oper_li:
        answer.append(calc(express, op))
        
    
    
    return max(answer)