[프로그래머스/파이썬] Level 2 수식 최대화

bye9·2021년 4월 22일
1

알고리즘(코테)

목록 보기
126/130

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


알고리즘 분류

  • 스택

문제풀이

레벨 3보다 어려웠다..;

+,-,* 3가지 연산자의 경우의 수에 따라 calculate함수를 수행했다.

calculate함수는 수식과 연산자를 받아 +,-,* 순이라면 해당 순서에 따라 연산을 수행한다.

일단 주어진 문자열을 ['100', '-', '200', ' * ', '300', '-', '500', '+', '20'] 와 같이 만든다. (array)

그리고 스택 자료구조를 활용해 해당 연산자를 만났을때 계산함수를 수행한다. 그리고 계속 array를 갱신해간다.

소스코드

from itertools import permutations

def operation(num1, num2, op):
    if op == '+':
        return str(int(num1) + int(num2))
    if op == '-':
        return str(int(num1) - int(num2))
    if op == '*':
        return str(int(num1) * int(num2))
    
def calculate(exp,op):
    array=[]
    tmp=""
    for i in exp:
        if i.isdigit()==True:
            tmp+=i
        else:
            array.append(tmp)
            array.append(i)
            tmp=""
    array.append(tmp)
    
    for o in op:
        stack=[]
        while len(array)!=0:
            tmp=array.pop(0)
            if tmp==o:
                stack.append(operation(stack.pop(), array.pop(0), o))
            else:
                stack.append(tmp)
        array=stack
            
    return abs(int(array[0]))

def solution(expression):
    op = ['+', '-', '*']
    op = list(permutations(op, 3))
    result=[]
    for i in op:
        result.append(calculate(expression, i))
    return max(result)

0개의 댓글