0. 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/67257
1. 풀이 방법
- 우선 입력으로 들어오는 수식을 +, -, *로 쪼개서 저장을 해야 한다. 이를 위하여 re를 사용했다.
- 또한 우선순위를 위해서는 모든 경우의 수를 따져야 하는데, 이를 위해서 itertools.permutations를 사용했다.
- eval을 통해서 문자열인 수식을 계산하고, 다시 방정식에 넣는 방식으로 문제를 해결했다.
- 이때 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. 마무리
'Computer Science > 알고리즘' 카테고리의 다른 글
[프로그래머스 - Python] 154540 - 무인도 여행 (0) | 2023.10.20 |
---|---|
[프로그래머스 - Python] 42883 - 큰 수 만들기 (0) | 2023.10.20 |
[프로그래머스 - Python] 68936 - 쿼드압축 후 개수 세기 (0) | 2023.10.20 |
[프로그래머스 - Python] 42583 - 다리를 지나는 트럭 (0) | 2023.10.15 |
[프로그래머스 - Python] 86052 - 빛의 경로 사이클 (0) | 2023.10.15 |