코딩테스트/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에 넣으며 우선순위대로 계산되도록 하여 결과적으로 최댓값을 구한다.

 

 

 

참조

https://velog.io/@bye9/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%ED%8C%8C%EC%9D%B4%EC%8D%AC-Level-2-%EC%88%98%EC%8B%9D-%EC%B5%9C%EB%8C%80%ED%99%94

 

[프로그래머스/파이썬] Level 2 수식 최대화

https://programmers.co.kr/learn/courses/30/lessons/67257스택레벨 3보다 어려웠다..;\+,-,\* 3가지 연산자의 경우의 수에 따라 calculate함수를 수행했다.calculate함수는 수식과 연산자를 받아 +,-

velog.io