AtCoder ABC 141 B – Tap Dance Python解説

スポンサーリンク

Tap Dance

高橋君はタップダンスをすることにしました。タップダンスの動きは文字列 S で表され、S の各文字は LRUD のいずれかです。各文字は足を置く位置を表しており、1 文字目から順番に踏んでいきます。
S が以下の 2 条件を満たすとき、またその時に限り、S を「踏みやすい」文字列といいます。
 奇数文字目がすべて RUD のいずれか。
 偶数文字目がすべて LUD のいずれか。
S が「踏みやすい」文字列なら Yes を、そうでなければ No を出力してください。

AtCoder Beginner Contest 「Tap Dance」

文字列Sの文字をひとつずつ確認していき、奇数番目、偶数番目が共に条件を満たしているか判定します。

s = input()
 
a = ["R", "U", "D"]
b = ["L", "U", "D"]
 
for i in range(len(s)):
    if i % 2 == 0:
        if s[i] not in a:
            print("No")
            break
    else:
        if s[i] not in b:
            print("No")
            break
else:
    print("Yes")

先述した通り、奇数番目、偶数番目が共に条件を満たしているか判定します。
文字列Sの1文字目はデータ上では0番目になるので注意しましょう。

s = input()

if not "L" in s[::2] and not "R" in s[1::2]:
    print("Yes")
else:
    print("No")

他の書き方。今回の問題ではL,R,U,Dのうち、LとRの出現位置だけ注意すればよいので、UとDは無視しても大丈夫です。スライスを使って文字列の奇数番目と偶数番目を取得しています。

s = input()
print("Yes" if not "L" in s[::2] and not "R" in s[1::2] else "No")

三項演算子を使い、さらにコードを短くした例。