코딩테스트

[코드트리] 알파벳과 사칙연산

yolang 2024. 9. 3. 17:29
728x90

Backtracking으로 문제를 해결해 봤다.

📚TroubleShooting🫧

  • 초기값을 0으로 잡았는데 이 경우에 음수 최대값을 찾을 수 없어서 문제가 있어 초기값을 음수로 세팅했다. 
  • 알파벳의 종류와 관계 없어 숫자를 배당했는데 오류가 생겼다. 예를 들어 a+a+a 일 때 3 + 3 + 3 뿐만 아니라 1 + 2 + 3도 계산해 버린것! ➡️ 변수 사전을 만들어 해결했다.
import sys


def plus(a, b):
    return a + b


def minus(a, b):
    return a - b


def product(a, b):
    return a * b


# input 처리
eq = list(input())
ops_map = {
    "+": 1,
    "-": 1,
    "*": 1
}

# input에 몇개의 알파벳과 기호가 있는 지 확인
total_symbol_count = 0
symbol_dict = {}
ops = []
total_sym = 0
sym_arr = []

for e in eq:
    if e in ops_map:
        total_symbol_count += 1
        ops.append(e)
    else:
        if e not in symbol_dict:
            symbol_dict[e] = total_sym
            total_sym += 1

max_val = -sys.maxsize


def recursion(count):
    global max_val

    if count == total_sym:
        eq_copy = eq[:]
        val = sym_arr[symbol_dict[eq_copy.pop(0)]]
        while eq_copy:
            temp = eq_copy.pop(0)
            if temp in ops_map:
                num = sym_arr[symbol_dict[eq_copy.pop(0)]]
                if temp == "+":
                    val = plus(val, num)
                elif temp == "-":
                    val = minus(val, num)
                elif temp == "*":
                    val = product(val, num)
        if max_val < val:
            max_val = val
        return

    for i in range(1, 5):
        sym_arr.append(i)
        recursion(count + 1)
        sym_arr.pop()


recursion(0)
print(max_val)
728x90