【Python】AtCoder abc124_c Coloring Colorfully

atcoder.jp

たぶんC問題では簡単な部類。

  • 最初が0なら01010101...
  • 最初が1なら10101010...

と必ずなるので、あとはそれとの違いがいくつあるかということを検出すれば良い。

まずテストコード。

import unittest
import main


class MainTest(unittest.TestCase):
    def setUp(self):
        pass

    def tearDown(self):
        pass

    def test_1(self):
        self.assertEqual(1, main.main("000"))

    def test_2(self):
        self.assertEqual(3, main.main("10010010"))


if __name__ == "__main__":
    unittest.main()

そして実装。

def main(input_str):
    input_list = list(input_str)
    count = 0
    if input_list[0] == "0":
        ans = []
        // [0,1,0,1,...]の配列を作る
        for i, _ in enumerate(input_list):
            if i % 2 == 0:
                ans.append("0")
            else:
                ans.append("1")
        for i, _ in enumerate(input_list):
            if input_list[i] != ans[i]:
                // 違えば+1
                count += 1

    else:
        ans = []
        // [1,0,1,0,...]の配列を作る
        for i, _ in enumerate(input_list):
            if i % 2 == 0:
                ans.append("1")
            else:
                ans.append("0")
        for i, _ in enumerate(input_list):
            if input_list[i] != ans[i]:
                // 違えば+1
                count += 1

    return count


if __name__ == "__main__":
    input_str = input()
    print(main(input_str))

どうみてもDRY化する余地があるがACしたので良し。