코딩테스트 파이썬/파이썬 프로그래머스 2단계
[카카오 인턴] 수식 최대화
세용용용용
2023. 9. 11. 17:04



코딩테스트 연습 - 수식 최대화 | 프로그래머스 스쿨 (programmers.co.kr)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
나의 코드
from itertools import permutations
def solution(expression):
answer = 0
# 부호의 우선순위 경우의 수
expressioin_list = set()
for i in expression:
if i in ["-","+","*"]:
expressioin_list.add(i)
for i in permutations(expressioin_list,len(expressioin_list)):
# 부호와 분리해 새로운 리스트를 만들어 주자
new_expression = []
str = ""
for x in expression:
if x in ['-','+','*']:
new_expression.append(str)
new_expression.append(x)
str = ""
else:
str+=x
new_expression.append(str)
for j in i:
# 현재 우선순위가 '-' 인 경우
if j =='-':
while True:
if '-' not in new_expression:
break
for i in range(len(new_expression)):
if new_expression[i] == '-':
new_expression[i] = int(new_expression[i-1]) - int(new_expression[i+1])
new_expression.pop(i-1)
new_expression.pop(i)
break
# 현재 우선순위가 '+' 인 경우
if j =='+':
while True:
if '+' not in new_expression:
break
for i in range(len(new_expression)):
if new_expression[i] == '+':
new_expression[i] = int(new_expression[i-1]) + int(new_expression[i+1])
new_expression.pop(i-1)
new_expression.pop(i)
break
# 현재 우선순위가 '*' 인 경우
if j =='*':
while True:
if '*' not in new_expression:
break
for i in range(len(new_expression)):
if new_expression[i] == '*':
new_expression[i] = int(new_expression[i-1]) * int(new_expression[i+1])
new_expression.pop(i-1)
new_expression.pop(i)
break
#print(new_expression)
answer = max(answer, abs(int(new_expression[0])))
#print(answer)
return answer
solution("50*6-3*2")