나의 개발일지

[프로그래머스] Lv.2 수식 최대화 [Python, 파이썬] KAKAO 본문

프로그래머스

[프로그래머스] Lv.2 수식 최대화 [Python, 파이썬] KAKAO

YoonJuHan 2023. 10. 11. 23:50

 

from itertools import permutations

def solution(expression):
    answer = 0
    op = [] # 연산자 종류
    
    if '+' in expression: op.append('+')        # 무슨 연산자가 쓰였나 찾아보자
    if '-' in expression: op.append('-')
    if '*' in expression: op.append('*')

    exp = []
    st = 0
    for i in range(len(expression)):            # 문자열로 된 표현식을 리스트로 바꾸자
        if expression[i] in ['+', '-', '*']:
            exp.append(expression[st:i])
            exp.append(expression[i])
            st = i+1
    exp.append(expression[st:])                 # 마지막 남은 숫자 넣자
    
    for p in permutations(op, len(op)):         # 가능한 연산자 우선순위 조합을 찾자
        tmp = exp

        for o in p:                             # 생성된 조합으로 계산 시작
            stack = [0] * len(tmp)              # 스택
            st = -1                             # 시작 위치
            cnt = 0                             # 스택이 내려간 횟수
            for t in tmp:                       # 리스트로 변환한 표현식 반복
                st += 1                 
                stack[st] = t                   # 스택에 일단 넣어
                if stack[st-1] == o:            # 바로 전 위치에 우선순위 연산자가 있으면
                    stack[st-2] = str(eval(stack[st-2]+stack[st-1]+stack[st]))  # 계산해
                    st -= 2                     # 스택 위치 내려
                    cnt += 2                    # 스택이 내려간 횟수 올려
            tmp = stack[:len(tmp)-cnt]          # 연산자 계산 완료된 스택 반환 (다음 연산자 반복)
        
        answer = max(answer, abs(int(tmp[0])))  # 한 조합 끝나고 정답을 업데이트 하자  

    return answer
Comments