[프로그래머스/Level2] 수식 최대화(Python)

SeokHyun·2022년 7월 11일
0

프로그래머스

목록 보기
21/32

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/67257

문제 접근

핵심

  1. 정규식을 이용한 숫자, 연산자 검출
  2. 연산자 우선순위 순열로 모든 우선순위 경우의 수 계산
  3. 중위 연산

소스 코드

from itertools import permutations
import re

def solution(expression):
    numbers = [int(i) for i in re.sub("[^0-9]", " ", expression).split(" ")]
    operators = list(re.sub("[0-9]", "", expression))
    setOperators = set(operators)
    
    maxValue = 0
    #연산자 우선순위 경우의 수에 따라 계산한 결과로 최대값 갱신
    for priority in permutations(setOperators, len(setOperators)):
        result = calculate(numbers.copy(), operators.copy(), list(priority))
        maxValue = max(maxValue, result)
    
    return maxValue

def calculate(numbers, operators, priority):
    targetOp = priority.pop(0)

    #연산자 배열이 빌 때까지 진행
    while operators:
        #현재 우선순위 연산자가 존재할 때까지
        #연산자 양 옆 두 수를 꺼내어 계산하고 다시 넣음
        if targetOp in operators:
            idx = operators.index(targetOp)
            op = operators.pop(idx)

            num1 = numbers.pop(idx)
            num2 = numbers.pop(idx)

            if op == '*':
                numbers.insert(idx, num1 * num2)
            elif op == '+':
                numbers.insert(idx, num1 + num2)
            else: 
                numbers.insert(idx, num1 - num2)
        else:
            targetOp = priority.pop(0)
        
    return abs(numbers[0])
profile
SI를 넘어 백엔드 엔지니어를 향하여

0개의 댓글