수식 최대화

bird.j·2021년 10월 12일
0

프로그래머스

목록 보기
40/53

프로그래머스

이 문제를 통해 파이썬의 정규표현식에 대해 조금 알게되었다.

import re
from itertools import permutations

def solution(expression):
    expression = re.split('([-+*])', expression)
    operators = list(permutations(['-', '+', '*'], 3))
    
    result = []
    for operator in operators:
        exp = expression[:]
        for op in operator:
            while op in exp:
                idx = exp.index(op)
                exp[idx-1] = str(eval(exp[idx-1] + op + exp[idx+1]))
                del exp[idx:idx+2]
        result.append(abs(int(exp[0])))
    return max(result)

expression = ['100', '-', '200', '*', '300', '-', '500', '+', '20'] operators = ['-', '+', '*'], ['-', '*', '+']..... operators의 순서는 연산자 우선순위이다. 따라서 operators의 원소 op가 있을 동안, 그 연산자의 인덱스를 찾아 앞 뒤 원소와 함께 수식을 계산해주고 앞 원소에 그 값을 넣어준다. 연산자 인덱스, 그 다음 원소 자리는 삭제해준다. 해당 연산자 순서대로 모든 계산이 끝나면 ['18000']['20020']['22000']['-60420']['-60380']['-60420'] 이렇게 리스트 형식으로 나오므로 exp의 0번째 원소를 int형식으로 바꾸고 절댓값으로 result에 넣는다.

  • expression = re.split('([-+*])', expression)
    --> ['100', '-', '200', '*', '300', '-', '500', '+', '20']

  • eval() : 문자열을 수식 그대로 계산해준다.
    ex) "200+300" 은 문자열이지만 200+300 = 500을 결과로 낸다.

0개의 댓글