코딩테스트/programmers (python)
Programmers / 2단계 / 수식 최대 / python / 2020 카카오 인턴십
seulll
2024. 7. 29. 22:30
문제 출처: 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