LoginSignup
1
0

More than 1 year has passed since last update.

【At Corder】【初心者】ABC049C - 白昼夢 をRuby で解いてみた

Posted at

はじめに

AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~ - Qiita

こちらの記事を参考に初心者がAt corderに挑戦します。
目的としては、就職活動でのコーディングテスト対策です。
毎日1問を目標としてコツコツやってきます:thinking:

わからないことは調べる精神です。ちょっとでもわからないなぁ、と思ったことは調べて解説と参考文献を載せますので、同じ内容でわからない人がいれば参考にししてください:baby:

問題文

文字列$S$は空文字列$T$の末尾に dream dreamer erase eraser のいずれかを追加して、$S = T$が成立するか判定せよ。

制約

  • $1≤|S|≤10^5$
  • $S$は英小文字からなる。

入力

S

出力

$S=T$とすることができる場合は YES をそうでない場合は NO を出力

入力例

erasedream

出力例

YES

erase dream の順で$T$の末尾に追加することで$S=T$とすることができる。

回答

s = gets.chomp
s = s.gsub(/eraser/,"").gsub(/erase/,"").gsub(/dreamer/,"").gsub(/dream/,"")
puts s.length == 0 ? "YES" : 'NO'

gsubを使う場合、()の中は正規表現じゃないとだめみたいなので注意。(最初配列を使ってeachで文字を順繰り消去しようとしたが、うまくいかなかった)

他の方の回答では、each、chom!メソッドを使って、末尾から消去していく方法もありました。

また、正規表現を使うと

puts gets.match(/^(dream|dreamer|erase|eraser)+$/)? "YES" : "NO" 

と1行で表せてしまいます。

感想

今回は難しかったです。自力で解くことはできませんでした・・!

いろんな方の回答例を参照させていただいて形にしました。かなり勉強になりました🤔

初めて正規表現を使ってみました!使えるようになるまで結構時間がかかりましたが、これを格好良く使いこなせる様になりたいですね。

参考文献

Rubyで指定した文字列が含まれるか確かめる方法を現役エンジニアが解説【初心者向け】 | TechAcademyマガジン

【Rubyの正規表現!】基礎の基礎から応用まで徹底解説! | 侍エンジニアブログ

はじめてのRuby!matchメソッドで正規表現によるマッチング | 侍エンジニアブログ

AtCoder に登録したら解くべき精選過去問 10 問を Ruby のメソッドチェーンで解いてみた - Qiita

[Atcoder]ABC049C - 白昼夢 / Daydream[Ruby]

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0