프로그래머스
[프로그래머스]수식 최대화
진철
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
반응형