[プログラマLV 2]数字の表示


質問する



この問題はいくら解いても効率的ではない.原因を知る前に、私が近づく方法について、

  • 数字を表す方法は数字です.
    2つの数字で表現できる方法があると思います⋯Nつの数字で表現します.

  • N個の数字は、1から増加し続け、現在確認すべき数よりも数字(1からN)の合計が大きくなると、
    切る方法で作りました.

  • 次いで、必要なtargetを表す連続数字の第1の値iを、数字Nに従ってtargetから1target == sum( i, i + n )に下げ、countを1、nを1増加させる.

  • targetが0に減っても出ない場合、nは1増加する.
  • このように変数i,nを使用してtargetの値を検索すると、現在検索する値よりも大きな値を検索するとbreakの問題が発生し、効率の問題が発生する可能性があります.

    方法

  • の数値を検索する必要があります(パラメータn)は次のとおりです.
    一つの表現方法で自分を表現する.
    2つの表現方法は、nが奇数の場合に見つけることができ、初期値は(n / 2)である.
  • したがって、
  • は、1つの方法で検索する必要がある数字を表す以外に、2つの方法で表される最小値が(n/2, n/2 + 1)である.
    初期値を求める変数i1からn // 2に増加した.
  •             for i in range(1, n // 2 + 1)
    # i는 초기 값
  • の初期値がiの場合、連続する数値が検索されます.
    連続する数値の和がnより大きいまで文をループします.連続数字の和を求める方法はsum_value = i + (i + 1) + (i + 2) ⋯に等しい
  • これを次のように表すことができます.
            sum_value = 0
            while sum_valne <= n:
                sum_value += i
                i += 1
                if sum_value == n:
                    count += 1
                    break

    コード#コード#

      def solution(n):
          count = 0
          for i in range(1, n // 2 + 1):
              sum_value = 0
              while sum_value <= n:
                  sum_value += i
                  i += 1
                  if sum_value == n:
                      count += 1
                      break
          return count + 1