s5unnyjjj's LOG
[홀로 하는 코딩 공부] 수식 최대화(Python) 본문
프로그래머스
사용 언어: Python
문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/67257
*** 본 문제를 푸는 과정을 공유하려 한다.
▶ 아래와 같이 작성해보았다.
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 값은 필터링 하였다.
>> 위 내용은 필자가 코딩테스트 문제를 푼 코드입니다.
>> 부족한 점이 많을 수 있기에 잘못된 내용이나 궁금한 사항이 있으면 댓글 달아주시기 바랍니다.
>> 긴 글 읽어주셔서 감사합니다.
반응형
'Algorithm > Python' 카테고리의 다른 글
[홀로 하는 코딩 공부] 1,2,3 더하기 4(Python) (0) | 2024.03.05 |
---|---|
[홀로 하는 코딩 공부] 정수 삼각형(Python) (0) | 2024.03.03 |
[홀로 하는 코딩 공부] 공주님을 구해라!(Python) (0) | 2024.02.21 |
[홀로 하는 코딩 공부] 게임 맵 최단 거리(Python) (0) | 2024.02.21 |
[홀로 하는 코딩 공부] 도넛과 막대 그래프(Python) (0) | 2024.02.14 |
Comments