문제는 아래와 같습니다.

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

 

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

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

programmers.co.kr

풀이

def solution(expression):

    from functools import reduce
    import re

	#세 개의 연산자가 있을 때 경우의 수
    cal1=[['*','+','-'],['*','-','+'],['+','*','-'],['+','-','*'],['-','+','*'],['-','*','+']]
    s=expression
	
    #세 종류의 연산자가 주어질 때 연산하기
	def func3(A,s):
        for i in re.split('['+str(A[1])+str(A[2])+']',s):
            if A[0] in i:
                s=s.replace(i,str(eval(A[0].join([str(n) for n in i.split(A[0])])))) 
        for i in re.split('['+str(A[2])+']',s):
            if A[1] in i:
                s=s.replace(i,str(eval(A[1].join([str(n) for n in i.split(A[1])]))))
        return abs(eval(A[2].join([str(n) for n in s.split(A[2])])))
	
    #두 종류의 연산자가 주어질 때 연산하기
	def func2(A,s):
        for i in re.split('['+str(A[1])+']',s):
            if A[0] in i:
                s=s.replace(i,str(eval(A[0].join([str(n) for n in i.split(A[0])])))) 
        return abs(eval(A[1].join([str(n) for n in s.split(A[1])])))
    
    #한 종류의 연산자가 주어질 때 연산하기
    def func1(A,s):
        return abs(eval(A.join([str(n) for n in s.split(A)])))
    
    #연산자가 몇 종류 있는지 알아보기
    cal0=[]
    if '-' in s:
        cal0.append('-')
    if '+' in s:
        cal0.append('+')
    if '*' in s:
        cal0.append('*')
    
    #계산된 값들 중 최대값 반환하기
    b=[]
    if len(cal0)==3:
        for a in cal1:
            b.append(func3(a,s))
        return max(b)
    if len(cal0)==2:
        for a in [cal0[::-1],cal0]:
            b.append(func2(a,s))
        return max(b)
    if len(cal0)==1:
        return func1(cal0[0],s)

+ Recent posts