문제 설명
•
주어진 연산 수식의 연산자 우선순위를 자유롭게 재정의하여 만들 수 있는 가장 큰 절댓값을 계산하는 문제
예제 입력/출력
expression | result |
"100-200*300-500+20" | 60420 |
"50*6-3*2" | 300 |
제약 조건
•
◦
•
연산자는 +, -, * 만으로 이루어짐.
문제 풀이
접근1 모든 연산자 우선순위 조합을 생성하는 방법 -
풀이 코드
from re import split
from itertools import permutations
def solution(expression):
# 브루트 포스로 해결합니다.
values = []
for priority in permutations(['*', '+', '-'], 3):
# 연산자와 피연산자를 리스트에 저장합니다.
operands = list(map(int, split('[*|+|-]', expression)))
operators = [c for c in expression if c in ['*', '+', '-']]
# 우선순위대로 연산을 수행합니다.
for op in priority:
while op in operators:
i = operators.index(op)
if op == "*":
v = operands[i] * operands[i + 1]
elif op == "+":
v = operands[i] + operands[i + 1]
else:
v = operands[i] - operands[i + 1]
# 피연산자 리스트를 업데이트 합니다.
operands[i] = v
operands.pop(i + 1)
# 연산자 리스트를 업데이트 합니다.
operators.pop(i)
values.append(abs(operands[0]))
return max(values)
Python
복사