오답노트
프로그래머스 - 수식최대화 본문
import re
result = 0
def cal_(a, b, ca):
if ca == '+':
return a + b
elif ca == '-':
return a - b
else:
return a * b
def solution(expression):
cal = list()
number = re.findall('\d+', expression)
answer = 0
for i in range(len(expression)):
if expression[i].isdigit() == False:
cal.append(expression[i])
for i in range(len(number)):
for j in range(len(cal)):
answer += cal_(int(number[i]), int(number[i]), cal[j])
print(answer)
return answer
프로그래머스 카카오 인턴십 관련 문제를 풀어봤다.
내가 푼 코드인데, isdigit 을 통해 나온 값들을 리스트에 넣어두고 숫자인 경우와 수식인 경우를 분리했다.
처음 정의한 함수는 각각의 수식문자를 입력 받았을 때 어떤 계산을 할 것인지에 대한 함수이고,
아래 부분은 정규식을 이용하여 숫자와 수식 문자를 분류하고 계산하는 함수이다.
그러나 이렇게하게 되면 반복문을 돌면서 서식이 여러번 사용 되어 제대로 계산이 되질 않았다.
import re
from itertools import permutations
def solution2(expression):
op = [x for x in ['*', '+', '-'] if x in expression]
op = [list(y) for y in permutations(op)]
ex = re.split(r'(\D)', expression)
a = list()
for x in op:
_ex = ex[:]
for y in x:
while y in _ex:
temp = _ex.index(y)
_ex[temp-1] = str(eval(_ex[temp-1]+_ex[temp]+_ex[temp+1]))
_ex = _ex[:temp]+_ex[temp+2:]
a.append(_ex[-1])
return max(abs(int(x)) for x in a)
다른 사람의 풀이를 참고한 코드인데,
itertools 의 permutations 을 사용했다.
순열을 만들어주는 함수이므로, 각 수식과 숫자가 필요한만큼만 사용 된다.