じょん・どうのブログ

趣味と勉強したことを吐き出すブログです。主に競プロ、Unity、トレカをやってます!

ABC049C - 白昼夢を解いてきました。

どうも、じょんです。

 今日も今日とて暇だったので、競プロの練習をしてきました。今日やった問題は「白昼夢」です。相変わらず問題名がそのまんますぎる

 とりあえず感想を述べると、ムズイ!!まだまだ始めたばかりの身にとってはかなり難しく感じるものでした。ただ、解いていくと、なーんだそんな事か~と、思ったよりも簡単だったことに気づかされましたw

問題のURL張っときます♪

 

https://atcoder.jp/contests/abs/tasks/arc065_a

 

 簡単に言うと、入力された文字列が"dream","dreamer","erase","eraser"だけで構成されているか否かを判定せよという問題です。考えてみたいという人は上のURLから飛んで、解いてみてください。

 さて、僕がこの問題にどうアプローチしたか?簡単です。

 

ごり押せ!!

 

ゴリラ的発想ですね。具体的にはどうしたかというと、まず、入力された文字列の一番初めを見て、それが'd'であれば、"dream"をあらかじめ用意していた空白("")の文字列に追加し、'e'があれば、"erase"を追加し、それらの文字の直後に文字があれば、それを調べ、先ほど追加した"dream"ないし"erase"が本当は"dreamer"ないし"eraser"ではないかを調べるという作業を繰り返したいくというものです。

f:id:John_Doekun:20200307101442p:plainこれはゴリラですね。もちろん吐き出された結果はTLEMLTの嵐ですわw(時間超過とメモリ超過)

  じゃあ、どうしようかと考えること1時間半(本番のコンテストだったら時間切れとか言わないで)。答えにたどり着きます。

 

あれ?これ入力された文字列の"eraser"、"erase"、"dreamer"、"dream"をこの順番で空白("")に置き換えていって、最終的に全文字が空白に置き換わったら"YES"、何かが余ったら"NO"って出力すればよくね?

 

ただ、僕はまだ文字列の一部を置き換える関数を知りません。調べました。

 

replaceってのがあるんや....

 

これを使ってコードを書いてやったら見事AC(Accepted)頂きました!

 競プロはACをもらった瞬間の達成感がいいですよね~♪(まあ、今回は時間の使い過ぎで虚無感の方が大きいですが.....)次はこの失敗を糧に一発AC目指して頑張るぞ!

 

p.s.

察しがいい人は気づいているかもしれませんが、僕が使ってる言語はJava8です。ついでに、今回解いた問題はAtCoder Biginners Selection に載っている、いわゆる良問らしいです。今はこれを使って修行中でございます。