KEEP GOING

[python] 프로그래머스 67257번 : 수식 최대화 (재귀 함수) 본문

code review/implementation

[python] 프로그래머스 67257번 : 수식 최대화 (재귀 함수)

jmHan 2022. 4. 29. 16:35
반응형

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

 

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

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

programmers.co.kr

 

1. 연산자의 우선순위 조합 > itertools 모듈의 permutations 함수 사용 

2. 주어진 우선순위대로 문자열 연산하기 > 재귀함수 구현★ 

 

from itertools import permutations 

# 재귀
def calc(op, idx, exp):
    if exp.isdigit():
        return str(exp)
    else:
        if op[idx] == '*':
            tmp = []
            split_data = exp.split('*') 
            for s in split_data:
                tmp.append(calc(op, idx+1, s))
            return str(eval("*".join(tmp)))
            
        if op[idx] == '-':
            tmp = []
            split_data = exp.split('-') 
            for s in split_data:
                tmp.append(calc(op, idx+1, s))
            return str(eval("-".join(tmp)))
    
        if op[idx] == '+':
            tmp = []
            split_data = exp.split('+') 
            for s in split_data:
                tmp.append(calc(op, idx+1, s))
            return str(eval("+".join(tmp)))
    
def solution(expression):
    answer = 0
    operations = list(permutations(['*', '+', '-'], 3))
    
    for op in operations:
        
        result = abs(int(calc(op, 0, expression)))
        answer = max(result, answer)
    return answer

 

<정리>

s = '200*200'
data = eval(s)
print(type(data)) # <class 'int'>

lst = s.split('*') # ['200', '200']
print(lst)
print('*'.join(lst)) # 200*200 (type:str)
print(eval('*'.join(lst))) # 40000 (type:int)

 

 

반응형
Comments