문제 링크
풀이
1. permutation을 통해 +,-,*의 가능한 우선순위를 모두 구한다.
2. 각 우선순위에 대하여 수식의 연산 값을 구하고 최댓값을 갱신한다.
수식의 연산 값을 구하는 함수는
1) 문자열로 된 수식을 숫자와 연산자 구분하여 배열에 넣기
2) 높은 우선순위 연산자 먼저 계산하기
3) 절댓값 반환 하기
from itertools import permutations
# 계산한 값 전달하는 함수
def operate(num1,num2,o):
if o == '+':
return int(num1) + int(num2)
if o == '-':
return int(num1) - int(num2)
if o == '*':
return int(num1) * int(num2)
def calculate(exp, o):
# 숫자와 연산자 배열에 넣기
array = []
tmp = ""
for i in exp :
# 숫자면 숫자들 이어붙이기
if i.isdigit():
tmp += i
# 연산자면 숫자 배열에 추가, 연산자 배열에 추가
else :
array.append(tmp)
array.append(i)
tmp = ""
# 마지막 숫자 배열에 추가
array.append(tmp)
for i in o:
stack = []
while len(array) > 0 :
t = array.pop(0)
# 현재 우선 순위가 가장 높은 연산자라면 계산
if t == i:
# stack에 추가된 가장 최근 숫자 + array에 담긴 연산자 다음의 숫자 + 연산자
stack.append(operate(stack.pop(), array.pop(0),t))
# 숫자거나 현재 우선순위가 가장 높은 연산자가 아니라면 stack에 추가
else:
stack.append(t)
# array를 stack으로 갱신
array = stack
# 상금의 절댓값
return abs(int(array[0]))
def solution(expression):
answer = 0
# 우선 순위 경우의 수 구하기
permute = list(permutations(['+','-','*'],3))
# 모든 우선 순위에 대하여 수식 값 구하고, 최댓값 구하기
for i in permute:
answer = max(answer, calculate(expression, i))
return answer
'개발 > algorithm' 카테고리의 다른 글
[프로그래머스][level2] 땅따먹기 (0) | 2022.03.30 |
---|---|
[프로그래머스][level2] n^2 배열 자르기 -python (0) | 2022.03.30 |
[프로그래머스][level2] JandenCase 문자열 만들기 - python (0) | 2022.03.29 |
[프로그래머스][level2] 교점에 별 만들기 - python (0) | 2022.03.29 |
[프로그래머스][level2] [1차] 캐시 (0) | 2022.03.29 |