본문 바로가기

Code-note

[문제리뷰] 수식 최대화 -python (programmers,Lv2)

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

## [카카오인턴] 수식 최대화 문제 

# target
- input : expression(숫자와 연산자이 섞어 있는 일차 계산식을 담은 문자열)
- output:연산자의 우선순위에 따른 계산 결과의 값 중 최대값을 도출
ex) * > + > - 의 순서로 순위가 높은 연산자부터 계산

# 필요한 함수(정의)
- solution : 여러 함수의 결과를 받아 최종 답을 산출
- expr_split : 계산식을 숫자와 연산자로 나누어 리스트에 문자로 저장하여 리턴
- spl_perm : [+,-,*]의 세가지 연산자의 순서를 바꾸어 만들수 있는 모든 조합을 답은 리스트 리턴 
- calculation : 우선순위 여섯가지 중 한가지 조합을 변수로 받아 결과값을 계산

 

def solution(expression):
    spl = ['+','-','*']
    expr = expr_split(expression,spl)
    spl = spl_perm(spl)
    answer = []
    for ss in spl:
        cal = calculation(expression, expr, ss)
        answer.append(cal)
    return max(answer)

 

def expr_split(expression,spl):
    expr = []
    temp = ''
    for i in expression:
        if i in spl: 
            expr.append(temp)
            expr.append(i)
            temp = ''
        else: temp += i
    else: expr.append(temp)
    return expr

 

from itertools import permutations
def spl_perm(spl):
    spl = list(permutations(spl, 3))
    return spl

 

from collections import deque
def calculation(expression, expr, ss):
    ex = deque(expr) # 계산할 문자열 원본
    for s in ss: 
        q = deque() # 수를 하나씩 담을 큐 
        while ex: 
            token = ex.popleft()
            if token == s:
                q.append(str(eval(q.pop()+token+ex.popleft())))
            else: 
                q.append(token)
        ex = q
    return abs(int(ex[0]))