大学内プロコンで最下位を取ってしまった僕でもAtCoder緑になれました!
こんにちは、osumi_kyopuroです。
今回の記事は私が緑コーダーになるためにやったことについて書きました。参考に出来ることはあまりないかもしれませんが読んでいただけると幸いです。
自己紹介
名前:osumi_kyopuro
年齢:22歳
最終学歴:現役で室蘭工業大学 情報電子工学系学科卒業
職業:Web Application Engineer
会社:都内アプリ開発会社(上場)
競プロを始めたきっかけ
競プロを始めるきっかけになった理由として二つあります。
一つ目はコンプレックスを解消したいと思ったからです。大学1年生の講義でプログラミングコンテストに参加しました。当時標準入力すら受け取れなかった私は学部内最下位を取ってしまいました。ショックが大きくこのまま情報系にいきプログラマーになれるのかすごく心配になりました。さらに私は人と比べて何をするにも遅く思考が浅くてよくクラスメイトや親から「ノロマ」と馬鹿にされたりしました。このプログラミングコンプレックスとスピードコンプレックスを解消するにはプログラミングコンテストが最適だと考えたので競プロをすることにしました。
二つ目は問題を解けると楽しかったからです。最初に解いていた問題はただ「Hello,World!」と標準出力するだけなのですがそれが出来たとき脳汁のようなものが出てくるのがわかりました。無我夢中で問題を解いていた気がします。この気持ちがやはり一番のモチベーションになっていると思います。このような理由から続けています。
緑コーダーになるためにやったこと
緑コーダーになるためにやったこととして四つあります。
一つ目はAtCoder Problemsの問題をたくさん解き、本番で時間がかかったり解けなかった問題は必ず復習をしたことです。AtCoder Beginner ContestのAB問はすべて、CD問のdiff1000以下の問題はほぼ解き累計1200問解いています。ただ解くだけではなく本番で30分以上かかってしまった問題はメモして再度復習するようにしました。そのおかげもあって早解きを安定させることができました。
今まで習得したデータ構造とアルゴリズム
- 全探索
- 二分探索
- bit全探索
- 累積和
- 座標圧縮
- ランレングス圧縮
- 約数全列挙
- 素因数分解
- 最大公約数(GCD)
- 最小公倍数(LCM)
- 深さ優先探索(BFS)
- 幅優先探索(DFS)
- imos法
- 尺取り法
- 動的計画法(DP)
- 連想配列
- 優先度付きキュー
- UnionFind木
二つ目はバーチャルコンテストに参加することです。必要なアルゴリズムやデータ構造を自分で取捨選択して実装する力をつけるにはこれが最適でした。本番以外でも本番に近い形式で練習すると本番でも焦らず考える事が出来るようになるのですべての競プロerにおすすめです。
三つ目は競プロ仲間を作り、コンテスト終了後に感想戦をすることをしました。これにより違う人の別の解法を知ることが出来たり、モチベーションをあげる事が出来ます。僕は実際にABC263(入緑したABC)でD問題を考えているときに、友人の会話を思い出して正解にたどり着く事が出来ました。さらに頑張っているのは私だけではないと奮い立たせることでより頑張ることが出来ました。
四つ目は謎解きパズルや中学受験用の算数文章題の問題集を解いて粘り強く考える癖をつけるようにしました。私自身、今まで数学や算数でわからない問題が出てきたらすぐに答えを見る癖があって考えることを避けてきて考える事が苦手でした。解決策として友人がパズルや算数を提案してくれました。直接的には競プロに影響していないようにみえますが、間接的に問題を粘り強く考える癖がついてきました。いつもABC3完程度で茶色停滞していて考察が得意ではない人に是非勧めたい勉強法です。
個人的には粘り強く考える力を養う練習をしてD問題がだんだん解けるようになったので四つ目の勉強法を実践して頂きたいです。
最後に
この記事を読んであなたの競プロ生活に役立てられたら幸いです。
ここまで読んで頂きありがとうございました。