Algorithm Problems

[카카오_인턴][Python] 수식 최대화

WakaraNai 2021. 9. 22. 01:05
728x90
반응형

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

 

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

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

programmers.co.kr

 

 

 

def multiply(list):
    ans = 1
    for l in list:
        ans *= l
    return ans

def minus(list):
    ans = list[0]
    for l in list:
        ans -= l
    return ans+list[0]

def solution(expression):
    # *-+, *+-  
    ans = 0
    
    temp = [] # *-+  
    for t in expression.split("+"):
        temp.append(minus([ eval(x) for x in t.split("-")]))
    ans = max(ans, abs(sum(temp)))
    
    temp = [] # *+-
    for t in expression.split("-"):
        temp.append(sum([ eval(x) for x in t.split("+")]))
    ans = max(ans, abs(minus(temp)))
    
    temp = [] # -+*   
    for t in expression.split("*"):
        temp.append(sum([ eval(x) for x in t.split("+")]))
    ans = max(ans, abs(multiply(temp)))
    
    
    temp = [] # +-*  
    for t in expression.split("*"):
        temp.append(minus([ eval(x) for x in t.split("-")]))
    ans = max(ans, abs(multiply(temp)))
    
    temp = [] # -*+   
    for t in expression.split("+"):
        temp.append(multiply([ eval(x) for x in t.split("*")]))
    ans = max(ans, abs(sum(temp)))
    
    temp = [] # +*-
    for t in expression.split("-"):
        temp.append(multiply([ eval(x) for x in t.split("*")]))
    ans = max(ans, abs(minus(temp)))
    
    
    return ans

 

 

 

정리

def multiply(list):
    ans = 1
    for l in list:
        ans *= l
    return ans

def minus(list):
    ans = list[0]
    for l in list:
        ans -= l
    return ans+list[0]

def which(s,t):
    if s == "*":
        return multiply(t)
    elif s == "+":
        return sum(t)
    return minus(t)

def solution(expression):
    ans = 0
    for op in ["+-*","-+*","*+-","*-+","-*+","+*-"]:
        temp = [] 
        for t in expression.split(op[0]):
            t = [ eval(x) for x in t.split(op[1])]
            temp.append(which(op[1], t))
        ans = max(ans, abs(which(op[0], temp)))
    
    return ans
728x90
반응형