본문 바로가기
PS/프로그래머스

[분할정복]프로그래머스 [카카오 인턴] 수식 최대화 python

by 지기_ 2021. 6. 17.
반응형

1. 문제

 

2. 풀이

분할 정복

분할정복은 dfs처럼 그 아래가 완성될 때, 라는 가정을 하고 푼다.

return을 잘 생각해야한다.

 

3. 구현

 

NameError: name 'ops' is not defined

ops를 함수 인자로 안보내줘서 난 에러

TypeError: unsupported operand type(s) for -: 'str' and 'int'

string 형태를 - 연산하려고 해서 난 에러, str을 cal로 보내 int형으로 바꾼 후 - 연산을 하도록 바꿨다.

 

def plus(ops,s):
    li = s.split('+')
    res = 0
    for item in li:
        res=res + int(cal(ops, item))
    # print("plus: ", res)
    return res
    
    
def minus(ops,s):
    li = s.split('-')
    res=int(cal(ops, li[0]))
    for item in li[1:]:
        res = res -int(cal(ops, item))
    # print("minus: ", res)
    return res
    
    
def mul(ops,s):
    li = s.split('*')
    res = 1
    for item in li:
        res=res * int(cal(ops, item))
    # print("mul: ", res)
    return res


def cal(ops,s):
    # print(s)
    if s.isdigit():
        return s
    
    res1=0
    res2=0
    res3=0
    
    if ops[0] in s:
        if ops[0]=='+':
            res1 = abs(plus(ops,s))
        elif ops[0]=='-':
            res2 = abs(minus(ops,s))
        elif ops[0]=='*':
            res3 = abs(mul(ops,s))
            
    elif ops[1] in s:
        if ops[1]=='+':
            return plus(ops, s)
        elif ops[1]=='-':
            return minus(ops, s)
        elif ops[1]=='*':
            return mul(ops, s)
            
    elif ops[2] in s:
        if ops[2]=='+':
            return plus(ops, s)
        elif ops[2]=='-':
            return minus(ops, s)
        elif ops[2]=='*':
            return mul(ops, s)
            
    return max(res1, res2, res3)
    
operations = [
    ['+', '-', '*'],
    ['+', '*', '-'],
    ['-', '+', '*'],
    ['-', '*', '+'],
    ['*', '-', '+'],
    ['*', '+', '-'],
]
    
def solution(expression):
    answer = 0
    for ops in operations:
        answer = max(answer, abs(cal(ops, expression)))
        # print(answer)
    return answer

 >.<!

 

 

반응형

댓글