728x90
https://school.programmers.co.kr/learn/courses/30/lessons/67257
연산자의 우선순위를 정하는 것을 순열 라이브러리로 구해 모든 경우를 확인해주는 brute force방법으로 풀었다.
계산할 때는 연산자 우선순위대로 순회한다.
해당 연산자를 계산하는 순서가 되었을 때, 연산을 한다.
expression 에서 해당 연산자가 아니라면 피연산자 취급을 해서 스택에 쌓는다.
x + y 라고 할 때 먼저 오는 x 에 해당하는 피연산자는 stack에 쌓인 것 중 맨 위에 있는 수를 pop 해서 쓰고, y 에 해당하는 피연산자는 현재의 ex에서 맨 앞에 있는 걸 pop(0) 해서 사용한다.
피연산자 두개와 연산자 하나를 계산해준 값을 stack에 저장하고
그 다음 우선순위에 해당하는 연산자를 계산해준다.
함수에 파라미터로 값을 전달하는 부분에서 헷갈렸다
그리고 ex 를 stack 으로 갱신해주면서 연산을 반복하는 것이 헷갈렸던 점이다
from itertools import permutations
def operation(x, y, op):
if op == '-':
return str(int(x)-int(y))
if op == '+':
return str(int(x)+int(y))
if op == '*':
return str(int(x)*int(y))
def calc(permu, expression):
# index 번호가 작을 수록 우선순위가 높다고 함
num = ""
ex = []
for i in expression:
if i.isdigit():
num += i
else:
ex.append(num)
num = ""
ex.append(i)
ex.append(num) # last num
for op in permu:
stack = []
while len(ex) != 0:
temp = ex.pop(0)
if temp == op: # 이번 계산순서와 맞는 operator 라면
stack.append(operation(stack.pop(),ex.pop(0),op))
else:
stack.append(temp)
ex = stack # 갱신
print(ex)
return abs(int(ex[0]))
def solution(expression):
answer = 0
for permu in list(permutations(["-","+","*"], 3)):
answer = max(answer, calc(permu, expression))
return answer
728x90
'Algorithm (PS)' 카테고리의 다른 글
백준 2011번 : 암호코드 파이썬/Python - DP (0) | 2023.01.04 |
---|---|
[백준] 7570번: 줄세우기 Python - Greedy/DP (0) | 2023.01.03 |
[백준] 15666번: N과 M (12) Python - 조합,구현 (0) | 2023.01.01 |
[백준] 17779 게리맨더링2 - Python - 구현 (0) | 2022.12.31 |
[백준] 1654번 랜선자르기 Python - 이진탐색 (0) | 2022.12.31 |