본문 바로가기
코딩테스트 파이썬/파이썬 프로그래머스 2단계

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

by 세용용용용 2023. 9. 11.

코딩테스트 연습 - 수식 최대화 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

나의 코드

from itertools import permutations
def solution(expression):
    answer = 0

    # 부호의 우선순위 경우의 수
    expressioin_list = set()
    for i in expression:
        if i in ["-","+","*"]:
            expressioin_list.add(i)
   
    for i in permutations(expressioin_list,len(expressioin_list)):
        # 부호와 분리해 새로운 리스트를 만들어 주자
        new_expression = []
        str = ""
        for x in expression:
            if x in ['-','+','*']:
                new_expression.append(str)
                new_expression.append(x)
                str = ""
            else:
                str+=x
        new_expression.append(str)

        for j in i:
            # 현재 우선순위가 '-' 인 경우
            if j =='-':
                while True:
                    if '-' not in new_expression:
                        break
                    for i in range(len(new_expression)):
                        if new_expression[i] == '-':
                            new_expression[i] = int(new_expression[i-1]) - int(new_expression[i+1])
                            new_expression.pop(i-1)
                            new_expression.pop(i)
                            break
           
            # 현재 우선순위가 '+' 인 경우
            if j =='+':
                while True:
                    if '+' not in new_expression:
                        break
                    for i in range(len(new_expression)):
                        if new_expression[i] == '+':
                            new_expression[i] = int(new_expression[i-1]) + int(new_expression[i+1])
                            new_expression.pop(i-1)
                            new_expression.pop(i)
                            break
           
            # 현재 우선순위가 '*' 인 경우
            if j =='*':
                while True:
                    if '*' not in new_expression:
                        break
                    for i in range(len(new_expression)):
                        if new_expression[i] == '*':
                            new_expression[i] = int(new_expression[i-1]) * int(new_expression[i+1])
                            new_expression.pop(i-1)
                            new_expression.pop(i)
                            break
            #print(new_expression)
        answer = max(answer, abs(int(new_expression[0])))
    #print(answer)
    return answer
solution("50*6-3*2")

'코딩테스트 파이썬 > 파이썬 프로그래머스 2단계' 카테고리의 다른 글

호텔 대실  (0) 2023.09.28
행렬 테두리 회전하기  (0) 2023.09.27
전력망을 둘로 나누기  (0) 2023.09.07
가장 큰 수  (0) 2023.08.14
[1차] 프렌즈4블록  (0) 2023.08.11