문제 링크 ▶︎ 프로그래머스 [카카오 인턴] 수식 최대화
이 문제는 스택으로 푼 구현 문제이다.
expression을 연산자와 피연산자로 나누고, (+,-,*) 3개뿐이라 그냥 길이 6인 order 배열을 만들어준다. (4이상이면 순열쓰면 될듯)
연산자와 피연산자 배열은 deepcopy 해서 order 배열의 순서마다 계산한다.
order 배열의 순서에 맞게 계산해주고 계산한 연산자와 피연산자는 pop해준다.
계산 완료된 값의 절댓값을 answer 배열에 넣어주고, answer 배열의 최댓값을 출력한다.
def cal(a,b,op):
if op == '+':
return a+b
if op == '-':
return a-b
if op == '*':
return a*b
import copy
def solution(expression):
answer = []
operator = []
for p in expression:
if not p.isdigit():
operator.append(p) # 연산자
for c in ['+','-','*']:
expression = expression.replace(c,' ')
num = list(map(int,expression.split(' '))) # 숫자
order = [['+','-','*'],['+','*','-'],['-','+','*'],['-','*','+'],['*','+','-'],['*','-','+']]
# 연산자 순서
for arr in order:
operand = copy.deepcopy(num) # 숫자
symbol = copy.deepcopy(operator) # 연산자
for sym in arr:
while sym in symbol:
i = symbol.index(sym)
v = cal(operand[i],operand[i+1],sym) # 계산 값
operand[i] = v
operand.pop(i+1)
symbol.pop(i)
answer.append(abs(operand[0]))
return max(answer)
생각보다 푸는데 어려움이 많았기 때문에 구현 문제를 더 많이 풀어봐야할듯.