平凡な社会人の日記

平凡な社会人の日記です。怠惰な毎日を送っております。

競技プログラミングの問題を300問解いた感想!(AtCoder)

さっちゃんです。競技プログラミングの問題を300問解いた吾輩のお気持ちをここに表明いたしますので、国民の皆様におかれましては耳掃除してから聞いてください。

競技プログラミングってなに?

私が本格的に競技プログラミングを始めたのはここ一ヶ月のことなので、私のフォロワーの人はあんまり競技プログラミングに馴染みがないと思います。競技プログラミングとは、問題が与えられて、それを解決する方法(アルゴリズム)を考えてプログラミングで解決する、ネットゲームのようなものです。週に一度か二度の頻度でコンテストと呼ばれる大会があり、複数の問題をいかに速く正確に解けるかを競います。特にAtCoderという会社が週末に開催しているコンテストには世界中の人が参加し、先週のAtCoder Beginer Contest 181には6000人以上が参加しています。良い結果を出せばレート(世界順位みたいなもの)が上がって楽しい、という楽しみ方があります。

atcoder.jp

例えば次のような問題が出ます。

問題文
ある長さ 6の英小文字からなる文字列がcoffeeに似ているとは、3文字目と4文字目が等しく、5文字目と6文字目も等しいことを言います。与えられる文字列Sがcoffeeに似ているか判定してください。
制約
Sは長さ6の英小文字からなる文字列である。
入力
S
出力
Sがcoffeeに似ている場合 Yes を、そうでない場合 Noを出力せよ。


これがABC160のA問題(一番簡単な問題)です。プログラミング言語は何でもいいのですが、python で書くとこんな感じです。一行目で入力を受け付けています。二行目で判定(0-indexなのでSの一文字目はS[0]、二文字目はS[1]みたいな感じです)を行い、それに応じて出力を変えています。

S = input()
if S[2]==S[3] and S[4] == S[5]:
    print('Yes')
else:
    print('No')

現状

まず現状です。(AtCoder Problems というサイトを活用させてもらっています。)
https://kenkoooo.com/atcoder/#/user/Sacchan?userPageTab=Progress+Charts


f:id:physics-heibon:20201104002235p:plain
f:id:physics-heibon:20201104002303p:plain
f:id:physics-heibon:20201104002315p:plain
f:id:physics-heibon:20201104002326p:plain


レートの遷移はこんな感じです。
f:id:physics-heibon:20201104002142p:plain

実は一年半前に一回参加したんですが、A問題しかできなくて辞めてしまいました。その後でプログラミングの勉強をしようと思って始めたら意外にハマってしまってこの有様です。こないだ茶色になれましたー。

お気持ち

300問解いた感想ですが、正直まだまだ「初心者」感が強いです。最近は参加者のレベルが高く茶色になるのも難しいと言われます。なので茶色になったら脱初心者と思っていいかなと思う反面、知らないアルゴリズム、解けない問題だらけでヒヨコ感がすごいです。しかし最近ダイクストラ法やベルマン・フォード法(大体の問題の負の閉路の検出難しくないですか?分かりません。)やA*、二分探索や累積和など知っている事が増えてきて嬉しいです。

自分の場合はレートの上がりで一喜一憂していると周りと比べてしまって悲しくなるので、昨日の自分や先週の自分と比べて何が出来るようになったかを気にするようにしています。解けなかった問題の解説を理解できたときとか、成長を感じて嬉しくなります。最近は電車に乗っている時もYoutubeでPG battleの問題の解説を見たりしています。

これから

まだまだ知らないアルゴリズム(ワーシャルフロイドとかいうやつ、BIT、セグ木)は気が向いたら適当に勉強して、AtCoder Problems の Recommendation の問題をといたりしながら既知のアルゴリズムに慣れていこうと思います。まぁ適当に。

年内に緑いけたらいいなー。生きてる間に水色になれたらいいなー。
社会人になったら競プロサークルに入ります。競プロの話を直接できるの楽しみ。

さっちゃん(twitter: @toshiakisan1127)