解答
1 2 3 4 5 6 |
n = int(input()) ans = 0 for i in range(3,16,3): #コンマが出るのは1000からなので3~15までの2個飛ばしのループで良い if n >= 10**i: #nの桁数の判定。3,6,9・・・という具合に増え、3桁ごとに処理を行う。 ans += n-(10**i-1) print(ans) |
コンマの数は3桁増えるごとに1つ増えていくので、for文では3,6,9,・・・という具合に3から15まで2個飛ばし(stepが3)で繰り返し処理で良いみたいです。
if文ではコンマの数が増える桁(3桁増えた場合)で場合を分けて処理を行います。
公式解答
解説 – パナソニックプログラミングコンテスト(AtCoder Beginner Contest 195)
振り返り
解答中のコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
""" 1,000,000,000,000,000 10**1~10 0 10**2~100 0 10**3~1,000 1 10**4~10,000 1 10**5~100,000 1 10**6~1,000,000 2 10**7~10,000,000 2 10**8~100,000,000 2 10**9~1,000,000,000 3 10**10~10,000,000,000 3 10**11~100,000,000,000 3 10**12~1,000,000,000,000 4 10**13~10000000000000 4 10**14~100,000,000,000,000 4 10**15~1,000,000,000,000,000 5 """ #1000未満はコンマが0回 if n < 10**3: print(0) #1回 elif 10**3 <= n < 10**6: #1,000,000未満 x = (n-(10**3-1))*1 print(x) #2回 elif 10**6 <= n < 10**9: x = (n-(10**6-1))*2+(10**6-(10**3-1))*1 print(x) #3回 elif 10**9 <= n <10**12: x = (n-(10**9-1))*3+(10**9-(10**6-1))*2+((10**6-1)-(10**3-1))*1 print(x) #4回 elif 10**12 <= n < 10**15: x = (n-(10**12-1))*4+(10**12-(10**9-1))*3+(10**9-(10**6-1))*2+(10**6-(10**3-1))*1 print(x) else: x = 5+(10**12-(10**9-1))*3+(10**9-(10**6-1))*2+(10**6-(10**3-1))*1 print(x) |
振り返りのために恥を忍んで記載。
解き方が全く分からなかったので、解答中は各桁でコンマが何回出てくるかを実際に書いていました。
1000未満ではコンマの数は0、1000000未満では1回、1000000000未満は2回・・・と言う具合だったので、3桁ごとに処理を分けて書いてみようとしています。長すぎるし、書いている途中で混乱してきて時間切れになりました。
公式解答では
~999までは0回、(~99,999までの各数字)*1、(~999,999,999までの各数字)*2、・・・といった具合に3桁ごとにコンマの数を計算していて訳が分からなくなってしまいました。
コメント