トップページに戻る    次の競技プログラミングの問題へ    前の競技プログラミングの問題へ

No.418 ミンミンゼミ

■■■問題■■■

ミンミンゼミが鳴いています。あなたはセミが何回「ミーン」と鳴いたかを数えようと思いました。

セミがどのように鳴いたかをあらわす文字列Sが与えられます。
この文字列は, 以下に定義する「ミーン文字列」をいくつか繰り返した文字列で,
これが繰り返された回数を数えることでセミが「ミーン」と鳴いた回数を数えることができます。

●まず"mi"から始まる。
●その後いくつかの"-"がつく。"-"の数は0でもかまわない。
●最後に"n"で終わる。

例えば "min","mi---n"はミーン文字列であり,
"mi--nn","m--n",などはミーン文字列ではありません。

あなたの仕事は, 文字列Sがいくつのミーン文字列を繰り返しているかを数えることです。

■■■入力■■■

S

セミの鳴き声をあらわす文字列Sが入力されます。

3 <= |S| <= 100
Sはミーン文字列を繰り返したものであることが保証される。

■■■出力■■■

セミが何回「ミーン」と鳴いたかを出力してください。最後に改行してください。


C#のソース

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;

class Program
{
    static string InputPattern = "InputX";

    static List<string> GetInputList()
    {
        var WillReturn = new List<string>();

        if (InputPattern == "Input1") {
            WillReturn.Add("mi--nminminminmi-------n");
            //5
            //"mi--n","min","min","min","mi-------n"の
            //5つの「ミーン文字列」があります
        }
        else {
            string wkStr;
            while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
        }
        return WillReturn;
    }

    static void Main()
    {
        List<string> InputList = GetInputList();
        string S = InputList[0];
        Console.WriteLine(Regex.Matches(S, "mi-*n").Count);
    }
}


解説

正規表現"mi-*n"にマッチする箇所を求めてます。