Programmers-次の大きな数字(Python)



問題の説明


自然数nが与えられると、nの次の大きな数は以下のように定義される.
  • 条件1.nの次の大きな数字はnより大きい自然数である.
  • 条件nの次の大きな数字とnがバイナリに変換されたときの1つの数は同じである.
  • 条件nの次の大きな数字は条件1,2を満たす最小の数字である.
  • たとえば、78(1001110)の次の大きな数字は83(1010011)です.
    自然数nをパラメータとして指定すると、nの次の大きな数を返す解関数を完了します.

    せいげんじょうけん


    nは1000000以下の自然数である.

    I/O例


    nresult78831523

    I/O例説明


    I/O例#1
    問題の例を以下に示します.
    I/O例#2
    15(1111)の次の大きな数字は23(10111)です.

    ハーモニー

    def solution(n):
        answer = 0
    
    
        # (1)
        cnt_one_bin_n_1 = bin(n).count('1')
    
        while 1:
            # (2)
            n = n + 1
    
            # (3)
            cnt_one_bin_n_2 = bin(n).count('1')
    
            # (4)
            if cnt_one_bin_n_2 == cnt_one_bin_n_1:
                # (5)
                answer = n
    
                # (6)
                break
    
        return answer
    
    n = 15
    print(solution(n)) # 결과 예 : 23 
    (1):nを2進数に変換した後、2進数nの1個数の変数cnt one binを決定する
    (2):n+1を順番に比較する
    (3):n+1を2進数に変換した後、2進数nの1の個数の変数cnt one bin 2を決定する
    (4):cnt one bin 2とcnt one bin 1が同じ場合、対応するif文を実行する
    (5):解答中n代入
    (6):whileゲート脱出

    📝 結果



    😃 に感銘を与える

  • 以前に解答したプログラマー問題では、「[1]次秘密地図」問題と非常に似ているようなので、解答しやすいようです.
  • 👍 Irishのすべてのコードを表示


    -> Irish Github