프로그래머스/lv.2
수식 최대화
bingual
2024. 3. 16. 19:32
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/67257
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제풀이
- 정수와 연산자를 각각 나누어 준다.
- 최대 가능한 조합은 3! 이기 때문에 3개의 연산자로 이루어진 순열을 구해주며 정수 배열은 연산자 배열에 비해 크기가 1이 크다. 따라서 (좌측 피연산자 연산자 우측 피연산자)에 대한 계산이 가능하다. 연산자를 만났을 때 연산자를 기준으로 피연산자에 대해 계산을 해준다. 계산에 사용된 좌측 피연산자는 계산 값으로 갱신하고 계산에 사용된 우측 피연산자와 연산자는 제거해 준다.
- 해당 과정이 끝나면 정수 배열은 계산된 하나의 정수만 남기 때문에 그중 최대 값을 경신해 준 것이 답이 된다.
from itertools import permutations
import re
def solution(expression):
answer = 0
numbers = list(map(int, re.split("[*+-]", expression)))
operators = re.findall("[*+-]", expression)
for operator_order in permutations(["*", "+", "-"]):
temp_numbers = numbers[:]
temp_operators = operators[:]
for op in operator_order:
i = 0
while i < len(temp_operators):
if temp_operators[i] == op:
if op == "+":
temp_numbers[i] += temp_numbers[i + 1]
elif op == "-":
temp_numbers[i] -= temp_numbers[i + 1]
elif op == "*":
temp_numbers[i] *= temp_numbers[i + 1]
del temp_numbers[i + 1]
del temp_operators[i]
else:
i += 1
answer = max(answer, abs(temp_numbers[0]))
return answer