저고데

[프로그래머스]수식 최대화 본문

프로그래머스

[프로그래머스]수식 최대화

진철 2023. 1. 24. 18:02
728x90
반응형

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/67257

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제를 간단히 요약하면 다음과 같다.

+, -, *만으로 이루어진 문자열이 있다.

이 때, 연산자의 계산 우선순위를 다르게하여 구할 수 있는 절대값의 최대값을 반환해야한다.

 

코드를 작성하기 위한 순서는 다음과 같다.

1. 연산자의 모든 조합의 경우의 수를 만들기 위해서 permutations을 import해준다.

2. 주어진 expression이 int형이 아닌 str형이므로 이 자체를 계산하기 위해서 eval을 사용하여준다.

3. 각 조합의 순서대로 분리하고 join하여 eval하는 과정을 재귀 함수로 호출하여 계산해준다.

4. 모든 조합의 결과값을 반환하고 max를 사용하여 가장 큰 값을 반환해준다.

from itertools import permutations #1번

def calc(johap, n, expression):
    if n==2:
        return str(eval(expression)) #2번 : 연산자의 종류가 3개이기 때문에, n=2일 때까지만 재귀 호출을 해준다.
    if johap[n]=='*':
        res=eval('*'.join([calc(johap,n+1,e) for e in expression.split('*')])) #3번 : 해당 연산자를 기준으로 분리한 후 나머지를 계산해준다.
    elif johap[n]=='+':
        res=eval('+'.join([calc(johap,n+1,e) for e in expression.split('+')]))
    elif johap[n]=='-':
        res=eval('-'.join([calc(johap,n+1,e) for e in expression.split('-')]))
    return str(res)

def solution(expression):
    answer = 0
    op=['+','-','*']
    for i in permutations(op, 3):
        answer=max(answer, abs(int(calc(i, 0, expression))))   
    
    return answer
728x90
반응형