Atcoderで水色になるまでにやったこと
どうも、Acompanyの高橋です。最近の週末は副業でポケモントレーナーをしてます。
さて、今日はOPTIMIND x Acompany Advent Calendar 2021 の2日目の記事となります。(今日始まったことに気がついて穴に滑り込みました)
今回は、個人的に趣味で続けていたAtCoder(競技プログラミングサイト)で1年ほどかけて水色になるまでにやったことを簡単に書きたいと思います!
平日は基本的に仕事に忙殺されていたので、土日を使いながらコツコツ勉強を進めていきました。なので、こうすれば爆速で水色になれる!という感じではない点はご了承ください🙏
↓実際の高橋のレートの変化(開始が2020/8/2、水色到達が2021/7/4)
なぜ競技プログラミングを始めたのか?
実はAcompanyでは、初期の頃から競技プログラミングをやっているインターン生(水色、ICPC国内予選通過)が活躍をしていました。そんな背景もあり、競技プログラマーの採用をがんばろうという機運が社内には存在していました。ただ、役員メンバーは競技プログラミングをやったことがなく、求職者の実力を知る肌感覚をあまり持っていませんでした。(というか僕がわかりませんでした)
なので、興味本位で少しやってみようと思いAtCoderで競技プログラミングを始めました。すると、想像以上に面白くて、しっかり勉強していきたいなという気持ちが芽生えてきました。そこでインターン生が水色だったこともあり、水色になるというのを一つの目標として競技プログラミングに取り組み始めました。ちなみに、C++を使っています。
実際にやったこと
水色までにやっていたことは下記です。
・蟻本を読む
・AtCoder ProblemsのHardをひたすら解く
・可能な限り毎週コンテストに参加する
・解けなかった問題は解けるようにする
書いてしまうと全く大したことをやっていないですね...w
個別の項目で実際どんな進め方をしていたかを紹介していきます。
蟻本を読む
競プロをやっていたインターン生に「競技プログラミングのバイブルはこれです」と紹介された書籍が「プログラミングコンテストチャレンジブック」通称蟻本。
とりあえず、素直に買って読み始めたのだが内容が重い。あと、説明がほしい部分が”当然のこと”として進んでしまう箇所も結構多くて、なかなかしんどかった。なので、実際には蟻本を読みながら、解説されているアルゴリズムをWEBで調べながら解説を理解していくという作業を繰り返していた。(WEB上のわかりやすい解説をしてくださったみなさまに感謝)
とはいえ、僕自身は情報工学専攻ではなく、物理工学科だったため様々なアルゴリズムに初めて触れる形だったので体系的にまとめられている書籍をベースにしつつ、理解を深めるというのは非常に良かったかなと思います。
Atcoder ProblemsのHardをひたすら解く
蟻本の勉強を進めつつ、並行して実際の問題も解いていました。そのときに利用していたのが、AtCoder ProblemsのTrainingにあるHard 100の問題でした。
正直、AtCoderでレートを上げていくには、理論よりもまず実際に問題を解く方が僕には向いているなと思いました。解きながらわからない理論を蟻本やWEBで調べつつ理解するということをやっていました。
基本的には休日の昼間にAtCoder Problemsで問題を解いていました。(水色到達時では77問を終えていました。)
可能な限り毎週コンテストに参加する
当然のことですが、AtCoderでレートをあげるためにはAtCoder内で毎週末に開催されているコンテストに参加する必要があります。また、実際にコンテストに参加すると、如何に早解きやWAを出さないことが重要なのかを身に沁みて感じます。ほんとに。
また、コンテスト参加中はその問題について死ぬほど考えるので、コンテストが終わってからも問題の印象が残っていて、別のコンテストで類題が出た際には対応がすぐにできるということがよくありました。これも実際にコンテストに参加することのメリットかなと思います。
なので、僕は基本土曜日の夜はコンテストが開催されたら基本参加できるように予定を確保していました。
また、AtCoder ProblemsでHard(緑~水色)以上の難易度になる問題は基本的にはコンテストに出題されている問題を理解するようにして、補っていました。僕が参加していた頃はABCが6問だったのですが、僕自身のレベル感としてはE以降は解けることがあるくらいのレベルでした。
解けなかった問題は解けるようにする
AtCoder Problemsでも、参加したコンテストでも解けなかった問題があった際は、可能な限り解答を理解し、解き直して正解するようにしていました。
コンテストの当日は疲れ果てていることもあるので、翌日(大体日曜日)の朝からカフェ(コメダ)にいきながら振り返るということをしていました。
余談ですが、コメダのモーニングはおぐらトーストが好きです。
また、AtCoder Problemsの問題は解いてから1-2週間くらいしたタイミングで同じ問題の解き直しもやっていました。最初解けなかった問題は次も解けないことが結構あるので、意外と同じ問題を解くのはおすすめです。
まとめ
振り返ってみると、コンテスト参加回数が56回なので、56*6=336、Atcoder Problems 77問の合計で416問(実際は初期の頃で復習していなかったり難しすぎて挫折した問題もあるので、350-400くらいかな?)を解けるように勉強したことでギリギリ水色に滑り込むくらいになりました。
個人的には、大学受験の数学を勉強している感覚に近かったです。なので、数学が好きな人はAtCoderに結構ハマる人がいるんじゃないかなと思います!
ちなみに、水色になってから3ヶ月ほどサボってしまっているので、そろそろ青色目指して精進を開始していきたいと思います...!
最後に宣伝
Acompanyでは競技プログラマーを積極的に採用しています!競技プログラマーは秘密計算エンジニアとしての適性が非常に高いです!実際に社内には競技プログラミンをやっているメンバーが多数在籍しており、刺激を受けれる環境です!
秘密計算については、こちらで解説しています。
また12月には競技プログラミングの大会「Acompany Programing Contest:APC」も開催します!
ぜひ、少しでも興味を持っていただけましたら、高橋のTwitterか採用ページからご連絡いただけますと幸いです!ぜひカジュアル面談しましょう!