[プログラマー]最大化式(Python)


質問する


式の最大化

問題の説明


これは、式のすべての優先度を求め、式の最大値を代入する問題です.優先順位は最大3!したがって、リストに個別に保存します.手書きで書くのが難しいと思えば,dfs,シーケンス,組合せなどを用いて実現できる.
  • で与えられた式を演算子と被演算子に区別し、各リストに保存します.
  • に格納された演算子の優先度を使用して計算されます.
  • ソースコード

    def calculate(seq, operator, operand):
        calculate_seq = [
            ["*", "+", "-"],
            ["*", "-", "+"],
            ["+", "*", "-"],
            ["+", "-", "*"],
            ["-", "*", "+"],
            ["-", "+", "*"],
        ]
        cal_operator = operator[:]
        cal_operand = operand[:]
        for i in range(3):
            idx = 0
            while idx < len(cal_operator):
                if calculate_seq[seq][i] == cal_operator[idx]:
                    a = int(cal_operand.pop(idx))
                    b = int(cal_operand.pop(idx))
                    op = str(cal_operator.pop(idx))
                    # 계산
                    if op == "*":
                        cal_operand.insert(idx, a * b)
                    elif op == "+":
                        cal_operand.insert(idx, a + b)
                    else:
                        cal_operand.insert(idx, a - b)
                    idx -= 1
                idx += 1
        # 마지막 남은 피연산자 절대값 씌워 리턴
        return abs(cal_operand[0])
    
    def solution(expression):
        answer = 0
        operator = []
        
        for i in range(len(expression)):
            if expression[i] == "-" or expression[i] == "*" or expression[i] == "+":
                operator.append(expression[i])
        expression = expression.replace("*", ",")
        expression = expression.replace("+", ",")
        expression = expression.replace("-", ",")
        operand = list(map(int, expression.split(",")))
        for i in range(6):
            answer = max(calculate(i, operator, operand), answer)
        return answer