+,-,* 의 연산기호만으로 이루어진 연산수식(expression) 에서 연산기호의 우선순위를 재정의하여 얻을 수 있는 최댓값을 구하는 문제
nums = expression.replace('-', '*')
nums = nums.replace('+', '*')
nums = nums.split('*')
nums = list(map(int, nums))
ex = [i for i in expression if i in '+*-']
nums
는 숫자들 배열,
ex
는 연산기호들의 배열
만약 expression = "100-200*300-500+20"
로 주어졌다면 nums
는 [100,200,350,500,20], ex
는 ['-','*','-','+']
def number(a,b,ex):
if ex=='*':
return a*b
if ex == '-':
return a - b
return a + b
단순히 a, b (숫자) 값과, 연산기호 ex 를 전달받아 연산한 값을 return 한다.
def compute(e, ex):
newnum = nums.copy()
newex = ex.copy()
for ex in e:
j = 0
while j < len(newex):
if newex[j] == ex:
del newex[j]
newnum[j] = number(newnum[j], newnum[j+1], ex)
del newnum[j+1]
else:
j+=1
return newnum[0]
우선순위 e 를 이용하여 연산한 값을 return 한다.
for e in list(permutations(['+','*','-'], 3)):
answer = max(answer, abs(compute(e, ex)))
permutations
은 가능한 연산기호들의 우선순의 배열들을 모두 가져오기 위한 순열 라이브러리.
def solution(expression):
operations = [('+', '-', '*'),('+', '*', '-'),('-', '+', '*'),('-', '*', '+'),('*', '+', '-'),('*', '-', '+')]
answer = []
for op in operations:
a = op[0]
b = op[1]
temp_list = []
for e in expression.split(a):
temp = [f"({i})" for i in e.split(b)]
print(temp)
temp_list.append(f'({b.join(temp)})')
answer.append(abs(eval(a.join(temp_list))))
return max(answer)
우선순위에 있는 것들을 ()
로 묶어 먼저 계산하게 했다 ㄷㄷ
expression 인자에 string 값을 넣으면 해당 값을 그대로 실행하여 출력해준다.
eval('123 * 1')
python 3.6 부터 제공하는 string format
중괄호를 이용하여 바로 format 할 수 있다
name = 'Gayoung'
print(f'Hi my name is {name}')
f 접두사를 통해 바로 이용 가능하다