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
- input
해결방법
- itertools.permutation을 이용하여 연산자의 우선순위를 재배치하는 6가지 경우를 구한다
- expression에 연산자와 숫자를 분리하여 저장한다
- expression을 뒤집어서 연산자 우선순위에 따라 eval함수를 이용해 계산한다
- 계산 결과값의 절대값 중 가장 큰 값을 구한다
막혔던 부분
- 한번 계산하고 난 후 temp를 stack에 저장할 때 뒤집어서 저장해야하는데 그냥 저장해서 계속 틀렸다