[구현] 2020 카카오 인턴십 - 수식 최대화

문제

포인트

  1. 숫자와 연산자를 각각 리스트로 분리하고 각각 요소를 인덱스로 접근
  2. 리스트 요소를 변경한 후에 다음 턴에서 인덱스를 지정할 때 영향이 가는 것을 고려해서 아이템 변경 후 삭제

코드

import re
from itertools import permutations
import copy

def solution(expression):
    answer = []
    origin_numbers = re.split('[*+-]', expression)
    origin_operators = re.split('[0-9]+', expression)[1:-1]
    unq_op = list(set(origin_operators))
    comb = list(permutations(unq_op))
    for case in comb: # 경우의 수
        numbers = copy.deepcopy(origin_numbers)
        operators = copy.deepcopy(origin_operators)

        for op in case: # 연산자 한개
            while op in operators:
                idx = operators.index(op)
                new = eval(str(numbers[idx])+op+str(numbers[idx+1]))
                numbers[idx] = new
                del operators[idx]
                del numbers[idx+1]
        answer.append(abs(numbers[0]))
    return max(answer)

참고

1

좋은 웹페이지 즐겨찾기