프로그래머스 / 수식 최대화 / python

맹민재·2023년 7월 3일
0

알고리즘

목록 보기
121/134
from itertools import permutations

def cal(a,b,g):
    if g == '+':
        return int(a) + int(b)
    elif g == '*':
        return int(a) * int(b)
    else:
        return int(a) - int(b)
    

def solution(expression):
    answer = 0
    giho = set()
    susic = {'+', '-', '*'}
    
    g_list = []
    idx = 0
    # 숫자와 기호 분리
    for i, s in enumerate(expression):
        if s in susic:
            giho.add(s)
            g_list.append(expression[idx:i])
            g_list.append(s)
            idx = i+1
    else:
        g_list.append(expression[idx:])
    
    # 모든 조합 permutaion으로 구하기
    for com in permutations(susic):
        tmp_list = g_list[:]
        # 각 조합에서 기호에 대한 for 문
        for s in com:
            idx = 0
            while s in tmp_list:
                if tmp_list[idx] == s:
                    tmp = cal(tmp_list[idx-1], tmp_list[idx+1], tmp_list[idx])
                    tmp_list = tmp_list[:idx-1] + [str(tmp)] + tmp_list[idx+2:]
                    idx = 0                
                idx += 1

        answer = max(answer, abs(int(tmp_list[0])))
            
    
    return answer

permutations 조합을 사용해서 해결한 구현문제

우선 주어진 문자열에 대해 숫자와 연산자를 분리하고 차례대로 리스트에 저장한다. 분리할 때 연산자는 set에 저장한다.

set에 저장한 연산자를 permutations를 통해 우선순의가 다른 모든 경우의 조합을 구한다.

이렇게 모든 경우의 수를 탐색하면서 최대 값을 구한다.


연산하면서 연산 진행한 숫자와 연산자를 지우고 연산 결과를 리스트에 넣는 과정에서 많이 막혔었다. 다 작성하고 보면 정말 간단해보이지만 처음 풀때는 저 부분에서 index 에러도 많이 봤고, 생각과 전혀 다르게 리스트가 저장되는것도 봤다. 리스트 수정할 때 index를 막 쓰지말고 차근차근 생각해보면서 확실하게 하자!!

profile
ㄱH ㅂrㄹ ㅈr

0개의 댓글