AtCoder ABC 023 B – 手芸王 Python解説

スポンサーリンク

手芸王

今回の問題はこちらからどうぞ「手芸王」。
文字列Sが与えられ、その文字列がアクセサリーの名前として考えられるかを判定し、考えられるなら何番目の手順の直後にアクセサリーの作成を終了したのかを求める。

アクセサリーは初期状態でb、手順1で左にa、右にcを加え、手順2で左にc、右にa、
手順3で両端にb、を繰り返すのでこれらの手順をループで回した結果と、与えられた文字列Sと比べてみます。

n = int(input()) // 2
s = input()
ans = "b"

for i in range(1, n + 1):
    if i % 3 == 0:
        ans = "b" + ans + "b"
    elif i % 3 == 1:
        ans = "a" + ans + "c"
    elif i % 3 == 2:
        ans = "c" + ans + "a"
        
if ans == s:
    print(n)
else:
    print(-1)

アクセサリーは2個ずつ増えるので、与えられる文字列数Nは2で割っています。

ansに初期状態のbを入れ、for文は手順1から回しています。手順は1から3でループするのでiを3で割った余りで条件文を書いています。

最後にif文でansとsを比較して完了。