s = input()
cnt00 = 0
i = 0
while i + 1 < len(s):
if s[i] == "0" and s[i+1] == "0":
cnt00 += 1
i += 1
i += 1
print(len(s) - cnt00)
こんなのはいかがでしょうか?
https://atcoder.jp/contests/abc283/tasks/abc283_c
現在pythonでこの問題に取り組んでおり、入力された数で00が出現した回数をカウントしたいと考えているのですが調べてみてもわかっていない状態です。わかる方がいましたらぜひ教えていただきたいです。
例 1002002
00の出現回数は2
'''''
問題文
高橋君は、レジ打ちの仕事をしています。
レジの機械には 00, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 の
11 個のボタンがあります。 レジの機械には、はじめ
0 が表示されています。 ボタン 00 を押すと、表示されている数が
100 倍されます。 それ以外のボタンを押すと、表示されている数が
10 倍されたあとに、押されたボタンに書かれている数が加算されます。
高橋君は、レジに整数
S を表示させたいです。 レジに
S が表示されている状態にするためには、少なくとも何回ボタンを押す必要があるか求めてください。
制約
1≤S≤10
100000
S は整数
'''''
s = input()
cnt00 = 0
i = 0
while i + 1 < len(s):
if s[i] == "0" and s[i+1] == "0":
cnt00 += 1
i += 1
i += 1
print(len(s) - cnt00)
こんなのはいかがでしょうか?
def min_keypresses(S):
num_presses = 0
while S > 0:
if S % 100 == 0:
S //= 100
else:
S //= 10
num_presses += 1
return num_presses
print(min_keypresses(40004)) # 4
print(min_keypresses(1355506027)) # 10
print(min_keypresses(10888869450418352160768000001)) # 27
説明:
whileループを使って、
整数Sを表示するのに必要な最小のボタンを押す回数を計算する関数です。
それぞれボタンの押された回数がnum_pressesでカウントされます。
正規表現を使って入力データを分解するアプローチもあります。
import re
#S = input()
S = '1002002'
res = re.findall(r'00|\d', S)
print(res) # ['1', '00', '2', '00', '2']
print(len(res)) # 5
入力されたデータSを左から順に見ていき
例の'1002002'という入力は ['1', '00', '2', '00', '2'] という塊のリストに分解されるので、要素の個数5が求める答えになります。
元の文字列の長さと、00を除いた文字列の長さから、00 の個数を求めてみました。
s = "1002002"
# len = 7
s_len = len(s)
ss = s.replace('00', '')
# len = 3
ss_len = len(ss)
# (7 - 3) / 2 = 2
ans = (int(s_len) - int(ss_len)) // 2
print(ans)
4人もの方に回答をいただけるとは。。。
ありがとうございます!!参考にさせていただきます!!