[programmers]式の最大化
7400 ワード
問題のショートカット
+、-、*の演算子のみで構成される演算子式で、演算子の優先度を再定義することによって得られる最大値の問題.
Others
+、-、*の演算子のみで構成される演算子式で、演算子の優先度を再定義することによって得られる最大値の問題.
操作input
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
は[002350500,20]であり、ex
は[-]、[*]、[-]、[+]である.number関数number関数:単純計算関数
def number(a,b,ex):
if ex=='*':
return a*b
if ex == '-':
return a - b
return a + b
a、b(数値)値と、演算子exを渡すだけで、計算された値が返されます.compute関数:優先度eで計算された値を返します。
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を使用して計算された値を返します.最後の一撃
for e in list(permutations(['+','*','-'], 3)):
answer = max(answer, abs(compute(e, ex)))
permutations
は、可能なすべての演算シンボルの優先順位を取得するためのシーケンスライブラリである.Others 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)
優先順位のものを()
にまとめて先に計算します
eval関数
string値をexpressionパラメータに入れると、そのまま実行され、出力されます.eval('123 * 1')
f-string
python 3.6から提供されるstring format
かっこで直接書式設定できますname = 'Gayoung'
print(f'Hi my name is {name}')
f接頭辞は直接使用可能
Reference
この問題について([programmers]式の最大化), 我々は、より多くの情報をここで見つけました
https://velog.io/@jujube0/Programmers-수식-최대화
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
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)
eval('123 * 1')
name = 'Gayoung'
print(f'Hi my name is {name}')
Reference
この問題について([programmers]式の最大化), 我々は、より多くの情報をここで見つけました https://velog.io/@jujube0/Programmers-수식-최대화テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol