2/프로그래머스

프로그래머스 연습 문제 - 수식 최대화

하례은 2020. 9. 29. 19:44

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

 

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

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

programmers.co.kr

2020 카카오 인턴쉽

 

import collections
def operator(pe,op,oper):
    sm = []
    operNum = collections.Counter(pe)

    

    if len(oper) == 3:
        expression = pe
        pe = []
        index = 0
        for i in range(len(expression)):
            if expression[i].isdigit() == False :
                pe.append(expression[index:i])
                pe.append(expression[i])
                index = i+1
            
            if i == len(expression)-1 :
                pe.append(expression[index:])


    if op == '+':
        count = operNum['+']
        oper.remove('+')
        for i in range(count):
            x = pe.index('+')
            num1 = pe[x-1]
            num2 = pe[x]
            num3 = pe[x+1]
            del pe[x-1:x+2]
            pe.insert(x-1,str(eval(num1+num2+num3)))
        if len(pe) == 1:
            return pe[0]
        if oper[0] == '-':
            sm = operator(pe,'-',oper)
        elif oper[0] == '*':
            sm = operator(pe,'*',oper)

    
    elif op == '-':
        count = operNum['-']
        oper.remove('-')
        for i in range(count) :
            x = pe.index('-')
            num1 = pe[x-1]
            num2 = pe[x]
            num3 = pe[x+1]
            del pe[x-1:x+2]
            pe.insert(x-1,str(eval(num1+num2+num3)))
        if len(pe) == 1:
            return pe[0]
        if oper[0] == '+':
            sm = operator(pe,'+',oper)
        elif oper[0] == '*':
            sm = operator(pe,'*',oper)

            
    elif op == '*':
        count = operNum['*']
        oper.remove('*')
        for i in range(count):
            x = pe.index('*')
            num1 = pe[x-1]
            num2 = pe[x]
            num3 = pe[x+1]
            del pe[x-1:x+2]
            pe.insert(x-1,str(eval(num1+num2+num3)))
        if len(pe) == 1:
            return pe[0]
        if oper[0] == '-':
            sm = operator(pe,'-',oper)
        elif oper[0] == '+':
            sm = operator(pe,'+',oper)

        


    return abs(int(sm))

            




def solution(expression):
    answer = []

    answer.append(operator(expression,'+',['+','-','*']))
    answer.append(operator(expression,'+',['+','*','-']))
    answer.append(operator(expression,'-',['-','+','*']))
    answer.append(operator(expression,'-',['-','*','+']))
    answer.append(operator(expression,'*',['*','-','+']))
    answer.append(operator(expression,'*',['*','+','-']))

    answer = max(answer)

    return answer

채점 결과

정확성: 90.0

합계: 90.0 / 100.0

 

하드코딩..이란 ..이런걸까

정확성에서 틀린건 런타임오류 때문인데 재귀함수를 써서 시간초과가 되는건지....잘 모르겠다...ㄱ-...열받...

pop()을 del로 바꿔줘도 계속 시간초과되고...후... 뭔가 방법을 찾아야겠다.