티스토리 뷰

728x90
반응형

문제

https://programmers.co.kr/learn/courses/30/lessons/67257?language=python3 

 

코딩테스트 연습 - 수식 최대화

IT 벤처 회사를 운영하고 있는 라이언은 매년 사내 해커톤 대회를 개최하여 우승자에게 상금을 지급하고 있습니다. 이번 대회에서는 우승자에게 지급되는 상금을 이전 대회와는 다르게 다음과

programmers.co.kr

 

코드

from itertools import permutations
def solution(expression):
    answer = []
    exp = []
    op = ['-', '+', '*']
    demo = ''
    per = list(permutations(op, 3))
    for i in expression:
        if i.isdigit():
            demo += i
        else:
            exp.append(demo)
            exp.append(i)
            demo = ''
    exp.append(demo)
    
    print(exp)
    for i1, i2, i3 in per:
        temp = []
        for j in range(len(exp)):
            if temp:
                if temp[-1] == i1:
                    temp.pop()
                    if i1 == '-':
                        temp[-1] = int(temp[-1]) - int(exp[j])
                    elif i1 == '+':
                        temp[-1] = int(temp[-1]) + int(exp[j])
                    else:
                        temp[-1] = int(temp[-1]) * int(exp[j])
                else:
                    temp.append(exp[j])
            else:
                temp.append(exp[j])
        temp2 = []
        for k in range(len(temp)):
            if temp2:
                if temp2[-1] == i2:
                    temp2.pop()
                    if i2 == '-':
                        temp2[-1] = int(temp2[-1]) - int(temp[k])
                    elif i2 == '+':
                        temp2[-1] = int(temp2[-1]) + int(temp[k])
                    else:
                        temp2[-1] = int(temp2[-1]) * int(temp[k])
                else:
                    temp2.append(temp[k])
            else:
                temp2.append(temp[k])
        temp3 = []
        for m in range(len(temp2)):
            if temp3:
                if temp3[-1] == i3:
                    temp3.pop()
                    if i3 == '-':
                        temp3[-1] = int(temp3[-1]) - int(temp2[m])
                    elif i3 == '+':
                        temp3[-1] = int(temp3[-1]) + int(temp2[m])
                    else:
                        temp3[-1] = int(temp3[-1]) * int(temp2[m])
                else:
                    temp3.append(temp2[m])
            else:
                temp3.append(temp2[m])

        answer.append(abs(temp3[0]))
                    
    return max(answer)

 

isdigit() 함수를 사용해서 연산자와 피연산자를 나눠서 리스트에 저장해준다.

그리고 연산자가 최대 3개이기 때문에 permutations로 모든 경우의 수를 확인해 연산해준다.

 

새로운 리스트를 한개 만들어 연산자와 피연산자가 들어있는 리스트를 한개씩 새로운 리스트에 넣어주고

 

현재 우선순위 연산자가 새로운 리스트 맨 마지막에 들어있다면

 

pop()을 해서 연산자를 제거해준다음 새로운 리스트 맨마지막에 연산한 값을 넣어준다.

 

이 과정을 반복해서 절대값이 가장 큰 값을 구하면 된다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30