[規格]30(10610)-python


▼▼問題


ある日、ミルコは偶然街で羊水Nを見た.ミルコは30という数字を尊敬しているので、街で見つけた数字を混ぜて、30の倍数で最大の数字を作りたいと思っています.
ミルコが作成したい数を計算するプログラムを作成するのを助けます.

🎈 入力


N入力を受け付けます.Nは最大105個の数字からなり、0で始まることはない.

🎈 しゅつりょく


ミルコが作りたい数字があれば、その数字を出力します.その数が存在しない場合は-1を出力します.

🎈 I/O例


30 ➡️ 30
102 ➡️ 210
2931 ➡️ -1
80875542 ➡️ 88755420

👩‍💻 マイコード


この問題を初めて見たとき、思ったより複雑かもしれないと思いました.しかし、問題は「30の倍数最大数」を作成するため、3の倍数フィーチャーを検索することです.検索の結果,3の倍数は非常に重要な特徴,すなわち1桁当たりの和が3の倍数であるため,容易に解くことができることを示した.
検索がなければ、このルールを自分で考え出せるかどうか疑問です.実際の符号化テストでは,この探索は許されないことを認識し,より多くの練習が必要である.🥲
コードを実装する前に考慮したルールは以下の通りである.
  • 3の倍数は、各ビット数の和が3の倍数である.
  • 最後の数字が0の場合、10の倍数になります.
  • 以上のルールを用いてコードを実現した.
    N = str(input())
    sum = 0
    arr = []
    
    if "0" not in N:
        print(-1)
    else:
        for i in N:
            sum += int(i)
            arr.append(int(i))
        if sum%3 != 0:
            print(-1)
        else:
            result = ""
            arr.sort(reverse=True)
            for i in arr:
                result += str(i)
            print(int(result))
    
    この問題を解くときに倍数を判定する方法を見ましたが、数字は神秘的なようです.また新しいことを学んで、気持ちがいいです.🙂