C♯の勉強

C♯4.0 で TopCoder の過去問を解きます。

TopCoder SRM 589: GearsDiv2

問題文

  • 「一番最初に削除する場所を固定してから貪欲」を全箇所で試す
  • 答えが 0 の場合は別処理
  • LINQ だと solve 関数のような一個前の値を見る系の処理が扱いづらいのが残念
public class GearsDiv2 {
    public int solve(String s)
    {
        int ans = 1;
        for (int i = 1; i < s.Length - 1; i++)
        {
            if (s[i] == s[i + 1])
            {
                ans++;
                i++;
            }
        }
        return ans;
    }

    public int getmin(string Directions)
    {
        int n = Directions.Length;
        int ans = int.MaxValue;
        if (!(Directions + Directions).Contains("RR") &&
            !(Directions + Directions).Contains("LL")) return 0;
        for (int i = 0; i < n; i++)
        {
            Directions = Directions.Substring(1) + Directions[0];
            ans = Math.Min(ans, solve(Directions));
        }
        return ans;
    }
}