문제 설명 및 제한사항
아이디어 및 해결 방법
코드
from re import split
from itertools import permutations
def solution(expression):
# 연산자 우선 순위가 6종류밖에 안 되고, expression 길이도 짧습니다.
# brute-force로 해결합니다.
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번째 연산자는 i번째 피연산자와 i+1번째 피연산자에 대한 연산을 수행합니다.
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(operands[0])
return max(abs(v) for v in values)
Python
복사
출처
프로그래머스 코딩테스트 연습 https://school.programmers.co.kr/learn/challenges