업데이트:

최대 1 분 소요

문제

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

P67257_.png

풀이

우선 순위를 따로 정해주지 못할 것 같아 연산자들에 대한 모든 경우의 수를 통해 permutations()함수를 사용해 해결한다.
실제 계산 단계 (for o in op 절)에서 expression의 연산자가 우선순위에 맞지 않는 연산자이거나 숫자라면 따로 q에 저장한다.

우선순위에 맞는 연산자라면 q에 따로 담아 두었던 숫자와 변환한 expression의 숫자를 하나 뽑아 계산하고 붙여넣은 뒤 이를 다시 갱신하는 것을 반복하여 해결한다.

def solution(expression):
    from collections import deque
    from itertools import permutations
    answer = 0
    operators = list(set(i for i in expression if i == '+' or i == '-' or i =='*'))

    for op in list(permutations(operators,len(operators))):
        exp = deque()
        num = ''
        for i in expression:
            if i.isdigit():
                num+=i
            else:
                exp.append(num)
                num = ''
                exp.append(i)
        exp.append(num)

        for o in op:
            print(o)
            q = deque()
            while exp:
                tmp = exp.popleft()
                if tmp == o:
                    q.append(str(eval(q.pop()+o+exp.popleft())))
                else:
                    q.append(tmp)
            exp = q

        answer = max(res, abs(int(exp[0])))        
    return answer

생각 & 정리

실제 계산 단계에서 q를 어떻게 관리할까에 대해서 많은 힘이 들었다.
l과 r변수를 만들어 숫자를 따로 뽑아내는 방법에 대해서도 생각해봤는데, 실제로 계산한 값을 붙이고 그만큼 칸을 줄이고 하는 과정에서 인덱스 예측이 어려워졌었다.
아직은 폭넓게 생각하는 능력이 부족하다고 느껴진다.

댓글남기기