문제는 아래와 같습니다.
https://programmers.co.kr/learn/courses/30/lessons/67257
코딩테스트 연습 - 수식 최대화
IT 벤처 회사를 운영하고 있는 라이언은 매년 사내 해커톤 대회를 개최하여 우승자에게 상금을 지급하고 있습니다. 이번 대회에서는 우승자에게 지급되는 상금을 이전 대회와는 다르게 다음과
programmers.co.kr
풀이
def solution(expression):
from functools import reduce
import re
#세 개의 연산자가 있을 때 경우의 수
cal1=[['*','+','-'],['*','-','+'],['+','*','-'],['+','-','*'],['-','+','*'],['-','*','+']]
s=expression
#세 종류의 연산자가 주어질 때 연산하기
def func3(A,s):
for i in re.split('['+str(A[1])+str(A[2])+']',s):
if A[0] in i:
s=s.replace(i,str(eval(A[0].join([str(n) for n in i.split(A[0])]))))
for i in re.split('['+str(A[2])+']',s):
if A[1] in i:
s=s.replace(i,str(eval(A[1].join([str(n) for n in i.split(A[1])]))))
return abs(eval(A[2].join([str(n) for n in s.split(A[2])])))
#두 종류의 연산자가 주어질 때 연산하기
def func2(A,s):
for i in re.split('['+str(A[1])+']',s):
if A[0] in i:
s=s.replace(i,str(eval(A[0].join([str(n) for n in i.split(A[0])]))))
return abs(eval(A[1].join([str(n) for n in s.split(A[1])])))
#한 종류의 연산자가 주어질 때 연산하기
def func1(A,s):
return abs(eval(A.join([str(n) for n in s.split(A)])))
#연산자가 몇 종류 있는지 알아보기
cal0=[]
if '-' in s:
cal0.append('-')
if '+' in s:
cal0.append('+')
if '*' in s:
cal0.append('*')
#계산된 값들 중 최대값 반환하기
b=[]
if len(cal0)==3:
for a in cal1:
b.append(func3(a,s))
return max(b)
if len(cal0)==2:
for a in [cal0[::-1],cal0]:
b.append(func2(a,s))
return max(b)
if len(cal0)==1:
return func1(cal0[0],s)
'Python' 카테고리의 다른 글
[프로그래머스] 124 나라의 숫자-I am yumida (0) | 2021.12.22 |
---|---|
[프로그래머스] 추석 트래픽-I am yumida (0) | 2021.12.21 |
[프로그래머스] 멀쩡한 사각형-I am yumida (0) | 2021.12.16 |
[프로그래머스] 문자열 압축-I am yumida (0) | 2021.12.12 |
[프로그래머스] 숫자 문자열과 영단어-I am yumida (0) | 2021.12.12 |