boj-4673:自動番号(python)


けいかく

  • コンストラクション関数によって生成された値を返す機能を組み合わせます.
  • linearsearchは、所定の範囲に昇順に値を生成します.
  • 作成者によって生成された値を消去する所定の範囲のデータリストをさらに作成する.[求xor,排他,余集的问题]
  • コード#コード#

    def creator(number):
      # 생성자를 통해 생성된 값을 리턴한다.
      value = number
      while number != 0:
        value += number % 10
        number = number // 10
      return value
    
    data = [i for i in range(1,10001)]
    for j in range(1,10001):
      created = creator(j)
      if created in data:
        data.remove(created)
    
    for k in data:
      print(k)

    渋滞や悩みの場所

  • time complexity = o(n)
  • space complexity = o(n)
  • spaceが複雑さを低減する方法があるかどうかはさらに考慮する必要がある.
  • 新知

  • 私はまた数を増やす方法を悟った.(以下の方法を使用)
  • 今はまだ勉强の初期で、もっと多くの方法があるはずです.
  • number = 124
    data = [int(i) for i in str(number)]
    sum(data)
    

    試行錯誤

  • 最初は数学的に次のように近い.
  • データサイズが大きくなるにつれて、11 a+2 b->101 a+11 b+2 c->1001 a+101 b+11 c+2 dのようなコードの拡張性が保証されず、コードの修正を継続する必要があるため、改善方法が見つかった.
  • 
    def printer():
      data = list(range(1,10001))
      for i in range(10):
        for j in range(10):
          for k in range(10):
            for m in range(10):
              value = 1001*i+101*j+11*k+2*m
              if value in data: # 생성자로 여러번 참여할 수 있으니까.
                data.remove(value)
      for number in data:
        print(number)
    
    printer()

    ミステリー

  • 4にfor文で記入すると、コードで記入する時間が増えます.理由が分かりません.