코딩테스트

수식 최대화

서창호 2022. 1. 26. 19:39

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

 

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

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

programmers.co.kr

 

from itertools import permutations

def solution(expression):
    answer = 0
    
    cal = [x for x in expression if not x.isdigit()]
    number = []
    
    num = ''
    for digit in expression:
        if digit.isdigit():
            num += digit
        else:
            number.append(num)
            num = ''
    number.append(num)
    
    case = set(cal)
    for order in permutations(case, len(case)):
        cur_number = number.copy()
        cur_cal = cal.copy()
        for operand in order:
            idx = 0
            while idx < len(cur_cal):
                if cur_cal[idx] == operand:
                    cur_number[idx] = str(eval(cur_number[idx] + cur_cal[idx] + cur_number[idx+1]))
                    del cur_number[idx+1]
                    del cur_cal[idx]
                    idx -= 1
                idx+=1
        if abs(int(cur_number[0])) > answer:
            answer = abs(int(cur_number[0]))
    return answer

 

eval 함수를 통해 좀 더 간결하게 구현하였다.

먼저 숫자와 수식을 구분하여 별도의 배열에 정리했다.

permutations를 통해 가능한 순서 순열을 찾는다.

이후 각 순서에 따라 수식들을 계산해보고 가장 큰 값을 answer에 대입한다.