본문 바로가기
Algorithm(CodeTree, Python)/Backtracking

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

by kurooru 2023. 1. 29.
# 식 입력
a = input()

# 함수들
# get_num(curr_a)
def get_num(curr_a):
    # ans 
    ans = curr_a[0]
    for i in range(len(curr_a)):
        # -를 만나면
        if curr_a[i] == '-':
            # ans update
            ans = ans - curr_a[i+1]
        # +를 만나면
        elif curr_a[i] == '+':
            # ans update
            ans = ans + curr_a[i+1]
        # *를 만나면
        elif curr_a[i] == '*':
            # ans update
            ans = ans * curr_a[i+1]
    # 반환
    return ans
    
# calc(curr_alphabets)
def calc(curr_alphabets):
    # curr_a
    curr_a = []

    # mapper
    mapper = {
        'a': curr_alphabets[0],
        'b': curr_alphabets[1],
        'c': curr_alphabets[2],
        'd': curr_alphabets[3],
        'e': curr_alphabets[4],
        'f': curr_alphabets[5],
        '-': '-',
        '+': '+',
        '*': '*'
    }

    # a를 돌면서
    for i in a:
        # curr_a에 추가
        curr_a.append(mapper[i])
    
    # 반환
    return get_num(curr_a)

# simulate(curr_idx)
def simulate(curr_idx):
    
    # 전역변수 선언
    global max_num

    # 종료조건
    if curr_idx == 7:
        # max_num update
        max_num = max(max_num, calc(alphabets))
        return
    
    # 숫자 넣어주기
    for i in range(1, 5):
        alphabets.append(i)
        simulate(curr_idx + 1)
        alphabets.pop()

# 설계
# alphabets
alphabets = []
# max_num
max_num = 0
# simulate
simulate(1)
# 출력
print(max_num)