ABC379 B問題の解説(Python)

はじめに

この記事では、ABC379のB問題を解説していきます。

ABC(AtCoder Beginner Contest)とは、AtCoderが開催している、競技プログラミングコンテストです。

ABC379 B – Strawberries

問題

問題

歯が左右一列に N 本生えており、歯の状態はある文字列 S によって表されます。

S の i 文字目が O のとき、左から i 番目の歯が丈夫であることを表し、S の i 文字目が X のとき、左から i 番目の歯が虫歯にかかっているとします。

連続する K 本の歯が丈夫であるとき、その K 本の歯を使ってイチゴを 1 個食べることができます。イチゴを食べると、その K 本の歯が虫歯にかかり丈夫でなくなります。

このとき、最大で何個のイチゴを食べることができるか求める問題です。

制約

  • \(1 \leqq K \leqq N \leqq 100\)

思考の筋道

この問題では、O の文字がどれだけ連結しているかを調べることが重要です。どのように調べればよいでしょうか?

split関数を使えば、簡単に調べることができます。split関数とは、ある文字列を指定の区切り文字で区切った結果のリストを返す関数です。

S = “OXXOOOXOOOOX”
区切り文字を”X”としてsplit関数を適用すると
[“O”, “”, “OOO”, “OOOO”, “”] という結果が得られます。

これにより O を連結ごとに分けることができました。あとはそれぞれの連結でいくつのイチゴを食べられるかを割り算の商を使って計算すればOKです!

コード

N, K = map(int, input().split())
S = input()

ans = 0
l = S.split("X")

for s in l:
  ans += len(s) // K

print(ans)

以上、ABC379のB問題の解説でした!

では、またね。

リンク