211216-N表示
9662 ワード
Nと表示:プログラマーLEVEL 3 https://programmers.co.kr/learn/courses/30/lessons/42895 質問する
以下に示すように、5と4の演算を使用して12を表すことができます.
12 = 5 + 5 + (5/5) + (5/5)
12 = 55/5 + 5/5
12 = (55 + 5)/5
5の使用回数はそれぞれ6,5,4である.その中で一番小さいのは4です.
Nとnumberが与えられた場合、Nと4則演算のみを使用するN使用回数の最高値を返すために、解法関数を作成します.
入力 Nは1または9未満です. は32000より大きい番号です. 式では、カッコとスラッシュの演算のみが許可され、除算演算で残りの部分は無視されます. しゅつりょく N使用回数の最小値 ピークが8より大きい場合は、-1を返します. I/O例
Nnumberreturn51242113
のり付け
1.解説の各回数で作成された数は、見つけて解決できます. 使用回数Iであれば、以下の数を作成することができる.
1個 (NN...N):長さI i次因数とj次因数の4則演算結果(ただしi+j=I) の回数は1から8まで繰り返し, が存在しなければ、以上の回数で 2.プログラム dp宣言 回が1の場合、追加 回回数が2~8の場合に追加 使用回数Iは を示す.
1個(NN...N):長さI i次因数とj次因数の4則演算結果(ただしi+j=I) 回行い、 が存在する場合、対応する回数 が返される.が存在しない場合、 が実行されます.
の回数がない場合は、 を返す.
以下に示すように、5と4の演算を使用して12を表すことができます.
12 = 5 + 5 + (5/5) + (5/5)
12 = 55/5 + 5/5
12 = (55 + 5)/5
5の使用回数はそれぞれ6,5,4である.その中で一番小さいのは4です.
Nとnumberが与えられた場合、Nと4則演算のみを使用するN使用回数の最高値を返すために、解法関数を作成します.
入力
Nnumberreturn51242113
のり付け
1.解説
1個
number
が存在する回数を探す.-1
を返却します.1個
number
回の有無を確認する-1
の# 코드
def solution(N, number):
answer = -1
dp = {i : set() for i in range(1, 9)}
if N == number:
answer = 1
return answer
dp[1].add(N)
for i in range(2, 9):
dp[i].add(int(str(N)*i))
for half in range(1, i//2+1):
for x in dp[half]:
for y in dp[i-half]:
add, minus1, minus2, mul = x+y, x-y, y-x, x*y
if 0 < add <= 32000 :
dp[i].add(add)
if 0 < minus1 <= 32000:
dp[i].add(minus1)
if 0 < minus2 <= 32000:
dp[i].add(minus2)
if 0 < mul <= 32000:
dp[i].add(mul)
if y != 0:
quotient, mod = divmod(x, y)
if mod == 0 and 0 < quotient <= 32000:
dp[i].add(quotient)
if x != 0:
quotient, mod = divmod(y, x)
if mod == 0 and 0 < quotient <= 32000:
dp[i].add(quotient)
if number in dp[i]:
answer = i
return answer
return answer
Reference
この問題について(211216-N表示), 我々は、より多くの情報をここで見つけました https://velog.io/@skarb4788/211216-N으로-표현テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol