Computer Science/알고리즘

[프로그래머스 - Python] 67257 - 수식 최대화

바보1 2023. 10. 20. 21:55

0.  문제 링크

 

 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


1.  풀이 방법

 

 

  1. 우선 입력으로 들어오는 수식을 +, -, *로 쪼개서 저장을 해야 한다. 이를 위하여 re를 사용했다.
  2. 또한 우선순위를 위해서는 모든 경우의 수를 따져야 하는데, 이를 위해서 itertools.permutations를 사용했다.
  3. eval을 통해서 문자열인 수식을 계산하고, 다시 방정식에 넣는 방식으로 문제를 해결했다.
  4. 이때 whlie문을 사용해서 인덱스를 조절했는데, 이유는 아래와 같다.
    • 리스트가 만약 ['100, '-', '90', '-', '5']라고 가정해보자.
    • 이때 - 연산을 해야 하고, 현재 인덱스가 1이라면 연산 후에 리스트는 ['10', '-', '5']가 된다.
    • 따라서 연산을 수행했다면, 인덱스는 가만히 놔둬야 한다.

2.  코드

 

 

import re
from itertools import permutations

def solution(expression):
    answer = 0
    
    equation = re.split('([-+*])', expression)
    equationOriginal = equation.copy()
    
    for priority in permutations(['-', '+', '*'], 3):
        for p in priority:
            i = 1       # 연산자는 1부터 시작함
            while i < len(equation):        # 어차피 길이가 1이면 아래 문장 한 번만 실행하고 끝남
                if equation[i] == p:
                    equation[i - 1 : i + 2] = [str(eval(''.join(equation[i - 1 : i + 2])))]
                else:
                    i += 2      # 연산자는 2칸마다 있음
        answer = max(answer, abs(int(equation[0])))
        equation = equationOriginal.copy()

    return answer

3.  마무리