ねむーの日記~AtCoderな日々~

福岡に住むプログラミング好きのブログです!

AtCoder Beginner Contest 147 B - Palindrome-philia

寒くて布団が恋しい季節です、ねむーです。

今回はAtCoder(https://atcoder.jp/contests/abc147/tasks/abc147_b)にて開催されました、AtCoder Beginner Contest 147 B問題「B - Palindrome-philia」の問題と僕との戦闘記です。

0.はじめに

今回も、プログラミング言語C#を使用しています。

1.問題文

高八士君は回文が大好きで、回文でない文字列が許せません。高八士君は文字列を 1 回ハグするごとに、文字列から 1 文字を選んで任意の文字に変えることができます。

文字列 S が与えられます。 S を回文にするために必要なハグの最小回数を答えてください。

2.制約

  • S は半角英小文字のみから成る文字列
  • S の長さは 1 以上 100 以下

3.入力例

  • 入力
abcdabc
  • 出力
2

4.初見の感想

  • 前と後ろから順に比較して、真ん中まで異なる回数を数えます
  • 入力の長さが奇数と偶数で真ん中の定義が少し変わります

5.学びポイント

  • 例えば文字数が3の時は2個目までは見てほしい訳です
  • 小数点の切り上げを行うのでCeling関数を使います

6.コードと簡単な解説

using System;
using System.Linq;
using System.Collections.Generic;
class Program
{
    static void Main(string[] args)
    {
        string input = Console.ReadLine();
        double half = input.Length/2;
        half = Math.Ceiling(half);
        int ans = 0;
        for (int i = 0; i < half; i++)
        {
            if (input[i] != input[input.Length - i - 1])
            {
                ans++;
            }
        }
        Console.WriteLine(ans);
    }
}

7.最後に

実際は小数点切り下げでも問題ないですよ!