ARC0683A 一次元リバーシ

問題

https://atcoder.jp/contests/arc063/tasks/arc063_a

方針

同色の石の連続を一塊りとして考える。

塊がいくつあるかを考え、その数から1を引けば良い。

実装のポイント

実装の際には、for文を回しながら直前の要素変数oldと比較を行い、異なっていれば答えに相当する変数ansをインクリメントする。

その際に、for文の最初で何が起きるかを考え、初期化を考える必要がある。

この実装では、BでもWでもない文字列initを与える事で、確実にインクリメントが発生するようにしている。

コード

1
2
3
4
5
6
7
8
S = input()
old = 'init'
ans = -1
for s in S:
if old!=s:
ans += 1
old = s
print (ans)

別解

ややテクニカルだが、標準ライブラリitertoolsgroupbyを用いるととてもシンプルに実装できる。groupbyで、隣接する同じ要素をイテレータとしてまとめることができるため、イテレータを数え上げることで、問題を解くことができる。

1
2
3
S = input()
g = itertools.groupby(S)
print (len(list(g)) - 1)