[프로그래머스] 수식 최대화 문제풀이 python

mauz·2022년 6월 21일
0
post-custom-banner

🐒 문제

https://programmers.co.kr/learn/courses/30/lessons/67257

✍ 나의 풀이

from itertools import permutations

def solution(expression):
    answer = -1
    calc = []
    for i,v in enumerate(expression):
        if v in ['-','+','*']:
            calc.append((v))

    numbers = expression.replace('*',' ').replace('+',' ').replace('-',' ')
    numbers = list(map(int,numbers.split()))

    for combo in permutations(['-','+','*'],3):
        tmpcalc, tmpnums = calc[:], numbers[:]
        
        for i in combo:
            while i in tmpcalc:
                pos = tmpcalc.index(i)
                if i == '-':
                    tmpnums[pos] = tmpnums[pos] - tmpnums[pos+1]
                if i == '+':
                    tmpnums[pos] = tmpnums[pos] + tmpnums[pos+1]
                if i == '*':
                    tmpnums[pos] = tmpnums[pos] * tmpnums[pos+1]

                tmpnums.pop(pos+1)
                tmpcalc.pop(pos)
        
        answer = max(abs(tmpnums[0]),answer)

    return answer

expression 문자열에서 수식과 숫자를 분리하는 법을 배울 수 있었다.

코드 완성했는데 오답나오길래 확인해보니 리스트를 복사 안하고 그대로 사용했다 ㅡ,.ㅡ

변수 이름짓기 너무 어렵다


🧠 문제 이해

사용한 아이디어 : 완전탐색, 순열

주어진 expression 문자열에 있는 수식기호의 계산 우선순위를 마음대로 설정하여 나온 계산값의 절대값 중에서 최대값을 구하는 문제이다.

우선순위 중 하나만 찝어서 최대값을 구할 수 없으니 완전탐색을 해야겠다고 생각했다.

수식기호의 우선순위의 경우의 수는 3! = 6 이라서 직접 하드코딩 할 수 도 있지만,
itertools의 permutations을 사용해 순열로 전체 경우의 수를 만든다음 하나씩 뽑아쓰는 방법을 이용하였다.

expression 문자열에서 수식과 숫자를 분리하는 법을 모르겠어서 검색을 해봤더니

split() 메소드를 사용하기전에 replace() 메소드로 기호들을 공백문자로 바꿔주었다.
그러면 숫자만 들어있는 리스트를 뽑아낼 수 있다.


profile
쥐구멍에 볕드는 날
post-custom-banner

0개의 댓글