구현문제

EHminShoov2J·2023년 8월 7일
0
post-thumbnail

1. [카카오 인턴] 수식 최대화

예제: [카카오 인턴] 수식 최대화
https://school.programmers.co.kr/learn/courses/30/lessons/67257

문자열이 input()으로 들어오게 되는 경우, 해당 문자열을 어떤 방식으로 받을지가 중요한 문제들이 존재. 문자열로 받았다 해서 반드시 문자열의 틀안에서 진행할 이유는 없음!

수식 계산과 관련된 문제의 경우, 문자열을 하나 하나씩 받아오는 것보다, split()을 활용하여 숫자와 연산자로 분리하여 계산하는 것이 유리한 경우가 존재 하며 또한 계산 하기 편한 방식으로 나누어서 저장해도 무방하다.

그리고 pop을 항상 stack으로 쓸때만 사용하는데, pop(idx)가 그리 효율적인 메소드는 아니지만 사용가능하다

from itertools import permutations

def solution(expression):
    answer = []
    operation_rank = permutations("+-*", 3)
    operator_list = []
    digit_list = []
    
    # 숫자인 부분과 연산자인 부분을 분리해서 저장
    stack = []
    for i in range(len(expression)):
        if expression[i] >= '0' and expression[i] <= "9":
            stack.append(expression[i])
        else:
            digit_list.append(int("".join(stack)))
            operator_list.append(expression[i])
            stack.clear()
    if stack:
        digit_list.append(int("".join(stack)))
    
    for operators in operation_rank:
        d = digit_list.copy()
        o = operator_list.copy()
        
        for op in operators:
            while op in o:
                idx = o.index(op)
                ans = 0
                if op == "+":
                    ans = d[idx] + d[idx+1]
                elif op == "-":
                    ans = d[idx] - d[idx+1]
                elif op == "*":
                    ans = d[idx] * d[idx+1]
                d[idx] = ans
                d.pop(idx+1)
                o.pop(idx)
        answer.append(abs(d[0]))

    return max(answer)

print(solution("100-200*300-500+20"))

0개의 댓글

관련 채용 정보