s5unnyjjj's LOG

[홀로 하는 코딩 공부] 수식 최대화(Python) 본문

Algorithm/Python

[홀로 하는 코딩 공부] 수식 최대화(Python)

s5unnyjjj 2024. 2. 21. 22:46

프로그래머스

사용 언어: Python

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/67257

 

프로그래머스

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

programmers.co.kr

 

 

*** 본 문제를 푸는 과정을 공유하려 한다.


▶ 아래와 같이 작성해보았다. 

import re
from itertools import permutations

def calculation(n1, n2, operation):
    if operation == '-':
        return n1 - n2
    elif operation == '*':
        return n1*n2
    elif operation == '+':
        return n1+n2
    
def solution(expression):
    answer = 0

    operations = list(filter(None, re.split('[0-9]', expression)))
    
    for opt_operations in list(permutations(list(set(operations)), len(list(set(operations))))):
        numbers = list(map(int, re.split('[+,*,-]', expression)))
        operations = list(filter(None, re.split('[0-9]', expression)))
        for opt_operation in opt_operations:
            while True:
                if not opt_operation in operations:
                    break
                for i, operation in enumerate(operations):
                    if opt_operation == operation:
                        tmp = calculation(numbers[i], numbers[i+1], operation)
                        del operations[i]
                        numbers = numbers[:i] + [tmp] + numbers[i+2:]
                        break
        tmp = abs(numbers[0])
            
        if answer <= tmp:
            answer = tmp
    
    return answer

 

 

단번에 성공하였다.

 

코드 추가 설명을 덧붙이자면 외부 라이브러리 re를 이용하여 숫자만을 제거하려고 split 함수를 사용하였다.

  - 숫자만을 추출하기 위해 split 함수만 사용하게 되면 "100-200*300-500+20" 의 경우 ['-', '*', '-', '+'] 가 나오길 기대 했지만 ['', '', '', '-', '', '', '', ...] <- 이렇게 나온다.

  - 이번에 구글링 하며 알게 된 사실인데, 해당 함수를 사용하게 되면 문자열을 패턴 기준(구분자)으로 쪼개되 구분자까지 저장되는 기능이 있다. 그래서 빈 곳도 나오는듯하다. 

  - 부호만을 남겨놓아야 했기에 내장 함수 filter함수를 사용하여 배열 값 중 None 값은 필터링 하였다.

 


>> 위 내용은 필자가 코딩테스트 문제를 푼 코드입니다.

>> 부족한 점이 많을 수 있기에 잘못된 내용이나 궁금한 사항이 있으면 댓글 달아주시기 바랍니다.

>> 긴 글 읽어주셔서 감사합니다. 

반응형
Comments