bong-u/til

프로그래머스 - 수식 최대화 (L2)

수정일 : 2023-09-16

 1from itertools import permutations
 2def solution(expression):
 3    answer = 0
 4    operations = list(filter(lambda x: not x.isdigit(), expression))
 5    numbers = expression.replace('-','+').replace('*','+').split('+')
 6    expression = [int(numbers[0])]
 7
 8    for i in range(len(operations)):
 9        expression.append(operations[i])
10        expression.append(int(numbers[i+1]))
11
12    for case in permutations(('+', '-', '*'), 3):
13        temp = expression[::-1]
14        for op in case:
15            stack = []
16            while temp:
17                if temp[-1] == op:
18                    temp.pop()
19                    a = stack.pop()
20                    b = temp.pop()
21                    stack.append(eval(str(a)+op+str(b)))
22                else:
23                    stack.append(temp.pop())
24            temp = stack[::-1]
25        answer = max(answer, abs(temp[0]))
26    return answer

문제

  • 숫자와 3가지 연산문자(+, -, *)만으로 이루어진 수식이 주어진다
  • 연산자의 수식을 재배치하여 얻을 수 있는 결과값의 절대값 중 가장 큰 값을 구하라
  • TC
    • input

      “100-200*300-500+20”

    • ouput

      60420

해결방법

  • itertools.permutation을 이용하여 연산자의 우선순위를 재배치하는 6가지 경우를 구한다
  • expression에 연산자와 숫자를 분리하여 저장한다
  • expression을 뒤집어서 연산자 우선순위에 따라 eval함수를 이용해 계산한다
  • 계산 결과값의 절대값 중 가장 큰 값을 구한다

막혔던 부분

  • 한번 계산하고 난 후 temp를 stack에 저장할 때 뒤집어서 저장해야하는데 그냥 저장해서 계속 틀렸다