Search

PGS 수식 최대화

URL
태그
구현
브루트포스 알고리즘

문제 설명

주어진 연산 수식의 연산자 우선순위를 자유롭게 재정의하여 만들 수 있는 가장 큰 절댓값을 계산하는 문제

예제 입력/출력

expression
result
"100-200*300-500+20"
60420
"50*6-3*2"
300

제약 조건

3expression1003 ≤ |expression| ≤ 100
0operand9990 ≤ |operand| ≤ 999
연산자는 +, -, * 만으로 이루어짐.

문제 풀이

접근1 모든 연산자 우선순위 조합을 생성하는 방법 - O(3!×expression)O(3! \times |expression|)

풀이 코드

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
복사

참고 자료