[programmers] 수식 최대화

데린이·2022년 4월 26일
0

+,-,*의 계산 우선 순위를 변경하여 최적의 값을 도출
https://programmers.co.kr/learn/courses/30/lessons/67257

Tips.
1. from itertools import permutations 사용
2. eval 사용

22-05-09

1시간 이상의 코딩 시간으로 fail..
-가 operation인지 음수를 뜻하는 기호인지 구분을 해야했는데, 다음에는 이 부분을 해결하면 좋겠음!

22-05-24

from itertools import permutations
import re


def number_list(expression):
    expression = expression.replace('-',"+")
    expression = expression.replace("*","+")

    return expression.split('+')

def negativity(number_str):
    if '@' in number_str:
        return '-'+number_str[1:]
    else:
        return number_str

def solution(expression):
    answer = 0

    for opr_prit in list(permutations([opr for opr in ["+","-","*"] if opr in expression])):

        new_exp = expression
        for op in opr_prit:
            while op in new_exp:
                opr_list = [ne for ne in new_exp if ne in ["+","-","*"]]
                n_list = number_list(new_exp)

                op_idx = opr_list.index(op)
                evaluation = eval(negativity(n_list[op_idx])+op+negativity(n_list[op_idx+1]))
                str_eval = '@'+str(abs(evaluation)) if evaluation < 0 else str(evaluation)

                del opr_list[op_idx]
                del n_list[op_idx:op_idx+2]
                n_list.insert(op_idx,str_eval)

                new_exp = ''
                for i in range(len(opr_list)):
                    new_exp += (n_list[i] + opr_list[i])
                new_exp += n_list[-1]

        answer = max(answer,abs(int(negativity(new_exp))))        

    return answer
  1. expression을 숫자로 이루어진 리스트와 operation으로 이루어진 리스트를 생성 (n_list, opr_list)
  2. 음수인 숫자를 '@'를 이용해 minus operation과 구별
    (다른 풀이보니까 이 과정이 필요없어보임,,,ㅠㅠ)
  3. eval를 통해 계산하고, 계산한 결과와 n_list, opr_list를 활용하여 expression 수정
profile
취뽀를 기원하는 취준생입니다!

0개의 댓글