Algorithm/Python

[파이썬/프로그래머스]수식최대화

박한결 2021. 5. 8. 10:54

1️⃣ 링크

programmers.co.kr/learn/courses/30/lessons/67257

 

코딩테스트 연습 - 수식 최대화

IT 벤처 회사를 운영하고 있는 라이언은 매년 사내 해커톤 대회를 개최하여 우승자에게 상금을 지급하고 있습니다. 이번 대회에서는 우승자에게 지급되는 상금을 이전 대회와는 다르게 다음과

programmers.co.kr

 

2️⃣ 코드

from itertools import permutations
import re

# expression 이 '50*20+2'인 경우에
def solution(expression):
    # {*, +}
    operator = set(re.sub('\d','',expression))
    # ['50', '*', '20', '+', '2']
    expression = re.split('(\D)', expression)
    answer = 0
    for op_cand in permutations(operator):
        tmp = expression
        for exp in op_cand:
            while exp in tmp:
                i = tmp.index(exp)
                tmp = tmp[:i-1] + [str(eval(''.join(tmp[i-1:i+2])))] + tmp[i+2:]
        answer = max(answer, abs(int(tmp[0])))
    return answer

1. expression에 있는 연산자 찾기

2. split 해주기

3. 연산자 우선순위에 따라 계산(for loop)

 


 

* eval 식 계산

ex1. eval('5+8') -> 13 (int type의 13이 나옴)

ex2. eval('a = 13') -> error

 

* exec 문 계산 

ex1. exec('5+9') -> error는 발생하지 않지만 사용 불가

ex2. exec('a=5+9') -> a는 int type의 14

 

* re.split()을 할 때 패턴을 ()로 감싸서 입력하면 매치되는 패턴이 제외되지 않음

예시

digit이 아닌 것을 기준으로 split하는 패턴이 '\D'인데, ()로 감싸서 '(\D)'를 패턴으로 사용하면 digit이 아닌 것(split하는 기준이 된 것)도 제외되지 않음