문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/67257
코드
from itertools import permutations
def operation(num1, num2, op):
if op == '+':
return str(int(num1) + int(num2))
if op == '-':
return str(int(num1) - int(num2))
if op == '*':
return str(int(num1) * int(num2))
def calculate(expression, op):
array = []
tmp = ""
for i in expression:
if i.isdigit() == True:
tmp += i
else:
array.append(tmp)
array.append(i)
tmp = ""
array.append(tmp)
for o in op:
stack=[]
while len(array)!=0:
tmp=array.pop(0)
if tmp==o:
stack.append(operation(stack.pop(), array.pop(0), o))
else:
stack.append(tmp)
array=stack
return abs(int(array[0]))
def solution(expression):
op = ['+', '-', '*']
op = list(permutations(op, 3))
result=[]
for i in op:
result.append(calculate(expression, i))
return max(result)
문제를 보고 어떻게 접근해야 할지 감이 잡히지 않아 코드를 찾아보았다.
나올 수 있는 연산자 우선순위를 순열을 이용해 리스트로 넣어 하나씩 돌려가며 최댓값을 구할 수 있다.
주어지는 expression은 calculate 함수에서 isdigit() 메서드를 이용해 숫자인지 판별하여 array에 숫자와 연산자를 넣어 계산한다. array.pop(0) 값이 연산자이면 operation 함수에서 계산되고 아니면 stack에 넣으며 우선순위대로 계산되도록 하여 결과적으로 최댓값을 구한다.
참조
[프로그래머스/파이썬] Level 2 수식 최대화
https://programmers.co.kr/learn/courses/30/lessons/67257스택레벨 3보다 어려웠다..;\+,-,\* 3가지 연산자의 경우의 수에 따라 calculate함수를 수행했다.calculate함수는 수식과 연산자를 받아 +,-
velog.io
'코딩테스트 > programmers (python)' 카테고리의 다른 글
Programmers / 2단계 / 행렬 테두리 회전하기 / python (0) | 2024.09.02 |
---|---|
Programmers / 3단계 / 가장 먼 노드 / python (0) | 2024.07.26 |
Programmers / 3단계 / 무인도 여행 / python (0) | 2024.07.18 |
Programmers / 3단계 / 섬 연결하기 / python / Greedy / Kruskal 알고리즘 (0) | 2024.07.13 |
Programmers / 3단계 / 징검다리 건너기 / python / 2019 카카오 개발자 겨울 인턴십 (0) | 2024.05.24 |