프로그래머스 수식 최대화

gmlwlswldbs·2021년 12월 1일
0

코딩테스트

목록 보기
87/130
from collections import deque
priority = []
def go(l, used):
    global priority
    if 3 == len(l):
        priority.append(l)
        return
    for i in ['+', '-', '*']:
        tmp = used[:]
        if i not in used:
            tmp += i
            go(l + i, tmp)

def solution(expression):
    answer = 0
    global priority
    go('', '')
    start_index = 0
    q = deque()
    for i in range(len(expression)):
        if expression[i] not in '0123456789':
            q.append(int(expression[start_index:i]))
            q.append(expression[i])
            start_index = i+1
    q.append(int(expression[start_index:]))
    for p in priority:
        nq = deque(q)
        for i in p:
            tmp = deque()
            if len(nq) == 0:
                continue
            x = nq.popleft()
            tmp.append(x)
            while nq:
                y = nq.popleft()
                # 만약 맞는 사칙연산
                if y == i:
                    z = nq.popleft()
                    w = tmp.pop()
                    if i == '+':
                        tmp.append(w+z)
                    elif i == '-':
                        tmp.append(w-z)
                    elif i == '*':
                        tmp.append(w*z)
                # 사칙 연산 틀리거나 숫자이면
                else:
                    tmp.append(y)
            nq = tmp
        a = nq.popleft()
        answer = max(answer, abs(a))

    return answer

0개의 댓글