수식 최대화

메캉·2022년 7월 20일
0

알고리즘 👑

목록 보기
8/11

URL

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

개선할 점

python의 포인트 되는 함수들에 대한 정리 필요

잘한 점

문제 풀이에 대한 접근이 가능

내 코드

import operator
from itertools import permutations

def solution(exp):
    ops = { "+": operator.add, "-": operator.sub, "*": operator.mul } # etc.
    answer = 0
    num = []
    op = []

    n = ''    
    for e in exp:
        if e in list((ops.keys())):
            num.append(int(n))
            op.append(e)
            n = ''
        else:
            n += e
    num.append(int(n))

    #우선 순위 높은 순서대로 괄호를 쓴다

    opl = list(ops.keys())
    opp = list(permutations(opl, 3))

    ans_list = []

    for p in opp:
        # print(p)
        # 값 초기화, op 초기화
        ans = 0
        cop = op.copy()
        cnum = num.copy()
        for i in range(3):
            while p[i] in cop:
                # 여기서 계산 진행하고 값 넣고
                idx = cop.index(p[i])
                res = ops[p[i]](cnum[idx], cnum[idx+1])
                ans += res
                cop.remove(p[i])
                del cnum[idx:idx+2]
                cnum.insert(idx, res)

            # 여기서 절대값 쓰고 ans_list에 추가
        ans = res
        ans_list.append(abs(ans))

    answer = sorted(ans_list)
    answer = answer[-1]

    return answer

참고 코드

def solution(expression):
    operations = [('+', '-', '*'),('+', '*', '-'),('-', '+', '*'),('-', '*', '+'),('*', '+', '-'),('*', '-', '+')]
    answer = []
    for op in operations:
        a = op[0]
        b = op[1]
        temp_list = []
        for e in expression.split(a):
            temp = [f"({i})" for i in e.split(b)]
            temp_list.append(f'({b.join(temp)})')
        answer.append(abs(eval(a.join(temp_list))))
    return max(answer)
    
    import re
from itertools import permutations

def solution(expression):
    #1
    op = [x for x in ['*','+','-'] if x in expression]
    op = [list(y) for y in permutations(op)]
    ex = re.split(r'(\D)',expression)

    #2
    a = []
    for x in op:
        _ex = ex[:]
        for y in x:
            while y in _ex:
                tmp = _ex.index(y)
                _ex[tmp-1] = str(eval(_ex[tmp-1]+_ex[tmp]+_ex[tmp+1]))
                _ex = _ex[:tmp]+_ex[tmp+2:]
        a.append(_ex[-1])

    #3
    return max(abs(int(x)) for x in a)

0개의 댓글