連続する整数値の中に「7」がいくつ出現するか数えるプログラムの高速化
大学で行っているプログラミングの問題で「連続する整数値の中に出現する「7」がいくつあるかを数えてください。」という問題が出題されました。
例えば[7, 99]
なら、「1,2,3,4,5,6,7」 と 「1,2,3,...,97,98,99」の数字の中にいくつ7
が出現するかというもので、7なら1、99なら20という答えになります。
(77
は7
が2個出現するので2個とカウントする。)
よって答えは[1, 20]
という結果を1秒以内に表示しないといけないというのが課題です。
しかし、[99, 77777, 23678947, 732465890, 1912478368]
この桁になると、処理速度が遅くて1秒を超えてしまい不可となってしまいます。
処理速度を早くするためにはどうすればよいでしょうか?Pythonでは限界があるのでしょうか?
コツとかがあれば是非教えてください!
import re
v = [99,77777,23678947,732465890,1912478368]
try:
while True:
v.append(input())
except EOFError:
pass
for o in range(len(v)):
x = v[o]
z = []
b = []
d = 0
w = int(x)
for s in range(1,w+1):
matchOB = re.findall("7",str(s))
if matchOB:
d += len(matchOB)
print(d)