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)
반응형