Notice
Recent Posts
Recent Comments
Link
나의 개발일지
[프로그래머스] Lv.2 수식 최대화 [Python, 파이썬] KAKAO 본문
- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/67257
- 🔑 조합을 구하고, 스택으로 계산, eval()
from itertools import permutations
def solution(expression):
answer = 0
op = [] # 연산자 종류
if '+' in expression: op.append('+') # 무슨 연산자가 쓰였나 찾아보자
if '-' in expression: op.append('-')
if '*' in expression: op.append('*')
exp = []
st = 0
for i in range(len(expression)): # 문자열로 된 표현식을 리스트로 바꾸자
if expression[i] in ['+', '-', '*']:
exp.append(expression[st:i])
exp.append(expression[i])
st = i+1
exp.append(expression[st:]) # 마지막 남은 숫자 넣자
for p in permutations(op, len(op)): # 가능한 연산자 우선순위 조합을 찾자
tmp = exp
for o in p: # 생성된 조합으로 계산 시작
stack = [0] * len(tmp) # 스택
st = -1 # 시작 위치
cnt = 0 # 스택이 내려간 횟수
for t in tmp: # 리스트로 변환한 표현식 반복
st += 1
stack[st] = t # 스택에 일단 넣어
if stack[st-1] == o: # 바로 전 위치에 우선순위 연산자가 있으면
stack[st-2] = str(eval(stack[st-2]+stack[st-1]+stack[st])) # 계산해
st -= 2 # 스택 위치 내려
cnt += 2 # 스택이 내려간 횟수 올려
tmp = stack[:len(tmp)-cnt] # 연산자 계산 완료된 스택 반환 (다음 연산자 반복)
answer = max(answer, abs(int(tmp[0]))) # 한 조합 끝나고 정답을 업데이트 하자
return answer
'프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv.2 거리두기 확인하기 [Python, 파이썬] KAKAO (0) | 2023.10.13 |
---|---|
[프로그래머스] Lv.2 삼각 달팽이 [Python, 파이썬] (0) | 2023.10.12 |
[프로그래머스] Lv.2 괄호 변환 [Python, 파이썬] KAKAO (1) | 2023.10.10 |
[프로그래머스] Lv.3 징검다리 건너기 [Python, 파이썬] KAKAO (0) | 2023.10.09 |
[프로그래머스] Lv.1 키패드 누르기 [Python, 파이썬] KAKAO (1) | 2023.10.09 |
Comments