自己紹介
- バックエンドエンジニア7年目
- ポートフォリオとして競技プログラミングに取り組み
業務とは直接関係ないですが、
アルゴリズムの理解や思考トレーニングとして始めました。
やったこと
- 競プロ典型 90 問
- 競技プログラミングの鉄則
- Educational DP Contest
- AtCoder Daily Training (ADT)
- NoviSteps
NoviSteps が公開されてからは、かなり参考にしながら問題を解いていました。
Accepted数
・Accepted: 1703
発信してみたこと
- 解説記事
- YouTube解説動画
アルゴリズム解説動画を作ったりもしました。
非エンジニアでも見られるように日常例を使って説明しています。
アルゴリズムを噛み砕いて説明する必要があるので結果として自分の理解もかなり深まりました。
あと普通に楽しかったです。
コンテスト参加について
D問題が安定して解けるまでコンテスト参加をやめていました。
コンテスト1回の時間で過去問 4〜5問 解けるからです。
コンテスト慣れも重要だと思いますが、「問題数を増やす」方を優先しました。
使ったツール
便利ツール
- Temporary Monkey
- online-judge-tools
デバッグ
練習スタイル
まずは5分ほど自分で考えます。
それでも解けない場合は解説を読み、内容を自分の言葉で整理して理解し直すようにしています。
長時間一問に詰まるよりも、理解して次の問題に進み、問題数を増やすことを意識していました。
実務で役立ったこと
- 転職活動のアピール材料
- コーディングインタビュー対策
実務でも、競プロで身についた考え方が役立つ場面がありました。
例えば、包除原理や区間和のような「全体から一部を引いて求める」考え方です。
ログ解析では「総件数 − 成功件数 = エラー件数」といった形でエラー数を検知する、といった場面で応用できました。
また、スライドウィンドウやセグメントツリーなどで出てくる「差分だけ更新する」という発想も役立つことがあります。
データベース運用でも、全レコードを更新するのではなく、
必要なデータを SELECT してから UPDATE するなど、差分を意識した処理を書く場面で近い考え方を使いました。
競プロは必須スキルではないですが、「公文のつるかめ算」みたいな立ち位置だと思っています。
知らなくても困らないけど知っていると便利、という感じです。
灰色・茶色の人へ
現役エンジニアでも、入茶にはそれなりに時間がかかると思います。
業務ではループや分岐、連想配列などは普通に使っていましたが、それでも入茶までには時間がかかりました。
最初の頃は、グラフ探索をDataFrameで解いていました。
学習を進めていく中で、BFSなどのアルゴリズムを知りました。
8方向探索を
for dx
for dy
のように書けると気づいたときは、「なるほど、こうやるのか」と少し感動したのを覚えています。
今後
当面の目標としていた入緑を達成することができました。
今後は競プロを続けつつ、自己開発にも取り組んでいきたいと思っています。
競プロの学習をサポートするツールや、色変までのロードマップを作成できるツール、練習を支援するツールなどを作ってみたいと考えています。

