Pythonの白駿4673セルフナンバーを使用
開けてみます。
これは1から10001の間の自己番号を求める問題です.
n+nの各ビット数の合計が返されることを示すd(n)という関数があり、d(n)に入力された値は出力として使用できません.すなわち、構造関数がなく、つまり値は値です.
最初の構想と問題に直面する
まず,以下に示す2つのユーザ関数を定義して解放する方法を考える.
function 1:問題で提案したd(n)に従ってリストの関数を保存する
function 2:自然数1から10001までの値からd(n)の出力リストの要素以外の結果リストを求め,これらのリスト要素の関数を順次出力する.
そしてこのように実現し、2つの問題に直面した.
問題1:function 1のd(n)関数を実現し,想像以上に非効率で汚いと感じた.もっと良いshort-cutができると思いますが、いずれにしてもfunction 1は実現し、動作は正常です.
質問2:重要な問題に遭遇しました.これは2つのlist間の重複要素をどのように排除するかに対する悩みである.最後に降伏を宣言して、方法を探して、少し虚脱な感じがします.
知ることが力であるという教訓を改めて銘記する.
問題2の解決方法は簡単です.
これはリストではなくset資料型を比較する問題です.
私はずっとこの点を体現したいと思っています.
Nested Loopを使用すると,10001 x 10001の低効率比較を経たため効率が低下し,これを実現することも容易ではない.
そして最終的に降伏を宣言しfunction 2に代わる方法を見つけ,set間の演算を用いて直接関数を実現する必要がない問題を簡単に解決できることが分かった.
(もちろんリストできるかどうかはわかりませんが、徐々に分かる問題です)
最終コード
function 1もより効率的なshort-cutを参照して修正した.
naturalNum = set(range(1,10001))
compareNum = set()
#function1에 해당하는 부분
for i in range(1,10001):
sum = 0
for j in str(i) :
sum += int(j)
sum += int(i)
compareNum.add(sum)
#function2에 해당하는 부분
selfNum = sorted(naturalNum - compareNum)
for i in selfNum :
print(i)
refhttps://wook-2124.tistory.com/252
Reference
この問題について(Pythonの白駿4673セルフナンバーを使用), 我々は、より多くの情報をここで見つけました https://velog.io/@he1256/백준4673-셀프넘버-using-Pythonテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol