問題
N個の座席が並んでおり、座席には1,2,…,Nの番号が付けられています。
座席の状態は#,.からなる長さNの文字列Sによって与えられます。
Sのi文字目が#のとき座席iには人が座っていることを表し、Sのi文字目が.のとき座席iには人が座っていないことを表します。
1以上N−2以下の整数iであって、以下の条件を満たすものの個数を求めてください。
座席i,i+2には人が座っており、座席i+1には人が座っていない
制約
N は 1 以上 2×10**5 以下の整数
S は #, . からなる長さ N の文字列
入力
入力は以下の形式で標準入力から与えられる。
N
S
出力
答えを出力せよ。
入力例 1
6
#.##.#
出力例 1
2
i=1,4 が条件を満たすので、答えは 2 です。
入力例 2
1
出力例 2
0
入力例 3
9
##.#.#.##
出力例 3
3
回答
n = int(input())
s = input()
key = 0
i = 2
while i < len(s):
if s[i-2] == "#" and s[i-1] == "." and s[i] == "#":
key += 1
i += 1
print(key)
参考
備考
- とりあえず正解した。とにかく動いたから問題なし。
- andが二つ連なっているのが若干違和感。もう少しスマートにできないかな。
- よくよく考えたら、for文の方が良くない?こういうところが手当たり次第に見つけた選択肢に食らいつくところだと思う。もう少し巨視的な視点で物事をみる訓練をしたい。
- 他の人のコードを見る限りやっぱりfor文で書いている。あと、条件式のところはまとめて"#.#"で検索をしている。確かにそっちの方がスマートな気もする。