キーワード
endswith, exit, 守破理
問題
英小文字からなる文字列
S が与えられます。
Tが空文字列である状態から始め、以下の操作を好きな回数繰り返すことで
S=T とすることができるか判定してください。
T の末尾に dream dreamer erase eraser のいずれかを追加する。
制約
1≦∣S∣≦10
5
S は英小文字からなる。
入力
入力は以下の形式で標準入力から与えられる。
S
出力
S=T とすることができる場合 YES を、そうでない場合 NO を出力せよ。
入力例 1
Copy
erasedream
出力例 1
Copy
YES
erase dream の順で
T の末尾に追加することで
S=T とすることができます。
入力例 2
Copy
dreameraser
出力例 2
Copy
YES
dream eraser の順で
T の末尾に追加することで
S=T とすることができます。
入力例 3
Copy
dreamerer
出力例 3
Copy
NO
回答
S = input()
words = ["dreamer", "eraser", "dream", "erase"]
while S:
flag = False
for word in words:
if S.endswith(word):
S = S[:-len(word)]
flag = True
break
if not flag:
print("NO")
exit()
print("YES")
参考
備考
- もうわかりませんでした。すみません人の参考にしました。sauna_lover様ありがとうございます。
- 流石に完全にコピペするのは悪いので自分なりに変えたつもりです。これが良くなかった。
- 自分としては変えたらダメなところは変えてないつもりなのに、いっこうに正解しない。もうやだ。
- 一つ知見としては、「人のコードを見るのは勉強になる!」
- 自分だけで正解のコードを書いたとしても、自分で最初に決めた解法に無意識に立脚してしまい、他の考えが閃かなくなる。だからこそ人のコードを見て、他の考えを入れて、自分の無意識を解放する。
- あと単純に僕より上手いコードを書ける人はごまんといる。だから、適当に見たとしてもほとんどが上手い人。同じ考えだっとしてもものすごく勉強になる。人のことをとにかく真似なさい。守破理!