티스토리 뷰
728x90
반응형
문제
https://programmers.co.kr/learn/courses/30/lessons/67257?language=python3
코드
from itertools import permutations
def solution(expression):
answer = []
exp = []
op = ['-', '+', '*']
demo = ''
per = list(permutations(op, 3))
for i in expression:
if i.isdigit():
demo += i
else:
exp.append(demo)
exp.append(i)
demo = ''
exp.append(demo)
print(exp)
for i1, i2, i3 in per:
temp = []
for j in range(len(exp)):
if temp:
if temp[-1] == i1:
temp.pop()
if i1 == '-':
temp[-1] = int(temp[-1]) - int(exp[j])
elif i1 == '+':
temp[-1] = int(temp[-1]) + int(exp[j])
else:
temp[-1] = int(temp[-1]) * int(exp[j])
else:
temp.append(exp[j])
else:
temp.append(exp[j])
temp2 = []
for k in range(len(temp)):
if temp2:
if temp2[-1] == i2:
temp2.pop()
if i2 == '-':
temp2[-1] = int(temp2[-1]) - int(temp[k])
elif i2 == '+':
temp2[-1] = int(temp2[-1]) + int(temp[k])
else:
temp2[-1] = int(temp2[-1]) * int(temp[k])
else:
temp2.append(temp[k])
else:
temp2.append(temp[k])
temp3 = []
for m in range(len(temp2)):
if temp3:
if temp3[-1] == i3:
temp3.pop()
if i3 == '-':
temp3[-1] = int(temp3[-1]) - int(temp2[m])
elif i3 == '+':
temp3[-1] = int(temp3[-1]) + int(temp2[m])
else:
temp3[-1] = int(temp3[-1]) * int(temp2[m])
else:
temp3.append(temp2[m])
else:
temp3.append(temp2[m])
answer.append(abs(temp3[0]))
return max(answer)
isdigit() 함수를 사용해서 연산자와 피연산자를 나눠서 리스트에 저장해준다.
그리고 연산자가 최대 3개이기 때문에 permutations로 모든 경우의 수를 확인해 연산해준다.
새로운 리스트를 한개 만들어 연산자와 피연산자가 들어있는 리스트를 한개씩 새로운 리스트에 넣어주고
현재 우선순위 연산자가 새로운 리스트 맨 마지막에 들어있다면
pop()을 해서 연산자를 제거해준다음 새로운 리스트 맨마지막에 연산한 값을 넣어준다.
이 과정을 반복해서 절대값이 가장 큰 값을 구하면 된다.
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Level2, 배달 (Python) (0) | 2021.09.13 |
---|---|
[프로그래머스] Level3, 불량 사용자 (Python) (0) | 2021.09.10 |
[프로그래머스] Level2, 거리두기 확인하기 (Python) (0) | 2021.08.25 |
[프로그래머스] Level3, 자물쇠와 열쇠 (Python) (0) | 2021.08.10 |
[프로그래머스] Level3, 합승 택시 요금 (Python) (0) | 2021.08.10 |
댓글