[アルゴリズム]白準2231号分解合


白俊2231号問題へ

質問する


ある自然数Nがある場合、その自然数Nの分解とは、NとNの各ビット数の和を意味する.ある自然数Mの分解とNであれば、MはNの生成者である.
例えば、245の分解は256(=245+2+4+5)である.したがって、245は256の生成者となる.もちろん、いくつかの自然数の場合、構造関数がない可能性があります.逆に,生成者が複数ある自然数もある.
自然数Nが与えられた場合,Nの最小生成者を解くプログラムを作成する.
(コンストラクション関数がない場合は0を出力)
  • 分類:ブルートフォード(フルナビゲーション)
    1から、(ジェネレータ+各ビット数の総和)を求めた後、Nに達する数字が1つ現れるとfor break
  • 回答の提出
    intをstrに変更して桁数で数字を格納させましたが、時間がかかりました...
    コードを修正したいのですが.
  • #처음 제출한 버전의 코드
    n = int(input())
    check = 0 #1부터 생성자 + 자릿수합을 체크하는 값
    result = 0 #최종결과값
    numEach = []
    
    
    for i in range(1, n):
        temp = str(i) #자릿수각각을 저장해놓기위해 str으로 변환
        numEach = [] #각 자릿수를 저장해 놓는 어레이
        for j in range(len(temp)): #str인덱스로 접근
            numEach.append(int(temp[j]))
        check = i + sum(numEach)
        if check == n:
            result = i
            break
    
    print(result)
  • 第2回提出
  • n = int(input())
    result = 0
    
    for i in range(1, n):
        eachSum = sum(map(int, str(i)))
        check = i + eachSum
        if check == n:
            result = i
            break
    
    print(result)