アルゴリズム入門も参考にしてください。
関連記事:エンジニアのキャリアロードマップ|未経験からステップアップする方法もあわせてご覧ください。
エンジニアの採用選考では、コーディングテストが実施されるケースが増えています。特にWeb系企業やメガベンチャー、外資系企業では、コーディングテストの結果が選考通過に大きく影響します。
この記事では、コーディングテストの概要、頻出テーマ、効果的な対策方法、おすすめの練習サイトまで体系的に解説します。
コーディングテストとは
コーディングテストは、プログラミング能力を測定するために行われる選考手法です。与えられた問題に対して、制限時間内にコードを書いて正しい出力を返すことが求められます。
コーディングテストの種類
| 種類 | 説明 | 実施タイミング |
|---|---|---|
| オンラインテスト | 自宅で受験。時間制限あり | 書類選考後〜一次面接前 |
| ライブコーディング | 面接官の前でコードを書く | 技術面接中 |
| テイクホーム課題 | 数日間の期限で課題を提出 | 書類選考後〜二次面接前 |
| ペアプログラミング | 面接官と一緒にコードを書く | 技術面接中 |
何が評価されるか
コーディングテストでは、単にコードが動くかどうかだけでなく、以下の点も評価対象になります。
- 正確性:すべてのテストケースを通過するか
- 効率性:計算量(時間計算量・空間計算量)が適切か
- 可読性:変数名や関数構造がわかりやすいか
- エッジケースの考慮:空配列、最大値、負の値などの境界条件を扱えているか
- 思考プロセス(ライブコーディングの場合):問題をどのように分析し、解法を導いたか
押さえるべき基礎知識
データ構造
コーディングテストで頻出するデータ構造を理解しておきましょう。
配列(Array)
最も基本的なデータ構造。要素へのアクセスがO(1)で高速ですが、挿入・削除はO(n)になるケースがあります。
ハッシュマップ(HashMap / Dictionary)
キーと値のペアを管理。検索・挿入・削除がO(1)(平均)で行えるため、頻出パターンです。
スタック(Stack)とキュー(Queue)
スタックはLIFO(後入れ先出し)、キューはFIFO(先入れ先出し)のデータ構造。括弧の対応チェックや幅優先探索でよく使われます。
リンクリスト(Linked List)
要素がポインタでつながったデータ構造。挿入・削除がO(1)ですが、ランダムアクセスはO(n)です。
木構造(Tree)
階層的なデータ構造。特に二分探索木(BST)や二分木の走査(前順・中順・後順)は頻出です。
グラフ(Graph)
ノードとエッジで構成されるデータ構造。SNSの友人関係や経路問題のモデル化に使われます。
アルゴリズム
頻出するアルゴリズムのカテゴリを整理します。
ソート
基本的なソートアルゴリズム(バブルソート、マージソート、クイックソート)の仕組みと計算量を理解しておきましょう。実務では言語組み込みのソート関数を使うことが多いですが、仕組みの理解が問われる場合があります。
探索
- 線形探索:O(n)
- 二分探索:O(log n)。ソート済み配列が前提
深さ優先探索(DFS)と幅優先探索(BFS)
グラフや木の探索で必須のアルゴリズム。再帰やスタック(DFS)、キュー(BFS)を使って実装します。
動的計画法(DP)
大きな問題を小さな部分問題に分割し、その解を再利用するテクニック。フィボナッチ数列、ナップサック問題、最長共通部分列などが典型問題です。
貪欲法(Greedy)
各ステップで局所的な最適解を選ぶアルゴリズム。区間スケジューリング問題などが該当します。
頻出の問題パターン
コーディングテストで繰り返し出題されるパターンを押さえましょう。
Two Pointers(二つのポインタ)
ソート済み配列で特定の合計値を持つペアを見つけるなど、二つのポインタを使って効率的に探索するテクニックです。
Sliding Window(スライディングウィンドウ)
配列の連続する部分配列に対する操作を効率化するテクニック。最大和部分配列や文字列のパターンマッチングで使われます。
ハッシュマップの活用
要素の出現回数のカウント、重複検出、2つのリストの共通要素の抽出などに活用します。
再帰とバックトラッキング
ツリーの探索、順列・組み合わせの列挙、数独ソルバーなどで使われるパターンです。
二分探索の応用
ソート済みデータでの検索だけでなく、「答えで二分探索」というテクニックも頻出します。条件を満たす最小値・最大値を求める問題に使います。
効果的な学習方法
ステップ1:基礎データ構造を学ぶ(目安:2〜3週間)
配列、ハッシュマップ、スタック、キュー、リンクリスト、木、グラフの基本操作と計算量を理解します。各データ構造の特徴と使いどころを整理しましょう。
ステップ2:基本アルゴリズムを学ぶ(目安:2〜3週間)
ソート、探索、DFS/BFS、動的計画法、貪欲法の基本を学びます。教科書的な問題を解きながら実装力を身につけます。
ステップ3:パターン別に問題を解く(目安:4〜8週間)
頻出パターン(Two Pointers、Sliding Window、二分探索の応用など)ごとに問題を解きます。パターンを認識し、適切なアルゴリズムを選択する力を養います。
ステップ4:時間を計って模擬テストをする(目安:継続的に)
本番と同じ条件(制限時間あり、エディタの補完なし等)で問題を解く練習をします。時間配分の感覚を身につけましょう。
学習のコツ
- 解けなかった問題は解説を読んで理解し、翌日にもう一度解く
- 一つのパターンに集中して連続で解く(日替わりでランダムに解くよりパターン認識が定着しやすい)
- コードを書く前に紙やホワイトボードで考えを整理する
- 計算量を常に意識する(O(n^2)で通るか、O(n log n)が必要かなど)
おすすめの練習サイト
LeetCode
コーディングテスト対策で最もよく使われるプラットフォームです。問題数が豊富で、難易度(Easy / Medium / Hard)別に分類されています。企業別の出題傾向がわかる機能(有料プラン)もあります。
AtCoder
日本発の競技プログラミングサイト。日本語の問題文で練習でき、定期的にコンテストが開催されています。初心者向けの「AtCoder Beginners Selection」から始めるのがおすすめです。
paiza
プログラミングスキルをランク判定してくれるサービスで、日本の企業の採用選考で利用されているケースもあります。ランク別の問題を解くことでスキルレベルを確認できます。
HackerRank
企業のコーディングテストのプラットフォームとして採用されていることがあるため、UIに慣れておく意味でも練習しておくと良いでしょう。
当日の注意点
オンラインテストの場合
- 環境を整える:安定したネット環境、静かな場所を確保する
- 使用言語を確認する:対応言語を事前に確認し、慣れた言語で受験する
- 時間配分を意識する:全問に目を通してから、解きやすい問題から着手する
- 部分点を狙う:全テストケースを通過できなくても、一部のテストケースを通すだけで得点になる場合がある
ライブコーディングの場合
- 思考を声に出す:考えていることを面接官に伝えながら解く。無言で考え込むよりも、思考プロセスを共有するほうが評価されやすい
- 質問をする:問題の条件が不明確な場合は遠慮なく質問する。質問力もコミュニケーション能力の評価対象になりうる
- まず愚直な解法を示す:最適解がすぐに思いつかなくても、ブルートフォース(総当たり)の解法を先に示してから最適化する流れがおすすめ
- テストケースを手動で確認する:コードを書いた後、簡単な入力例でトレース(手作業での確認)を行う
使用言語の選び方
コーディングテストで使う言語は、自分が最も慣れている言語を選ぶのが基本です。ただし、以下の点も考慮しましょう。
- Python:文法がシンプルで記述量が少ない。標準ライブラリが充実しており、コーディングテストで人気。ただし実行速度の制限がある問題では不利になるケースも
- JavaScript / TypeScript:Web系エンジニアにとって馴染みのある言語
- Java:企業向けシステムの求人で指定されることがある
- C++:実行速度が速く、競技プログラミングで人気。ただし記述量が多い
- Go:シンプルな文法と高速な実行速度
よくある質問(FAQ)
Q. コーディングテスト対策にはどのくらいの期間が必要ですか?
A. プログラミングの基礎がある方で、1〜3ヶ月程度が目安です。毎日1〜2問ずつ継続的に解くのが効果的です。基礎から始める場合はさらに時間を見込んでおきましょう。
Q. コーディングテストが苦手でもエンジニアになれますか?
A. コーディングテストを実施しない企業もあります。ポートフォリオや実務経験を重視する企業も多いため、コーディングテストが苦手であっても他の強みで評価される可能性はあります。ただし、選考の選択肢を広げるためには対策しておくことが望ましいです。
Q. 競技プログラミングの経験は必要ですか?
A. 必須ではありません。コーディングテストと競技プログラミングは共通する部分(アルゴリズム、データ構造)がありますが、コーディングテストのほうが実務寄りの問題が多い傾向です。LeetCodeのEasy〜Medium問題を中心に練習すれば、多くの企業のコーディングテストに対応できます。
Q. コーディングテストでライブラリは使えますか?
A. 通常、言語の標準ライブラリは使用可能です。ただし、外部パッケージ(npmのライブラリなど)は使えないのが一般的です。受験前に利用規約を確認しましょう。
Q. コーディングテストの結果はどのくらい選考に影響しますか?
A. 企業によって比重は異なります。テストの結果だけで合否が決まる企業もあれば、面接やポートフォリオと総合的に判断する企業もあります。いずれにしても、コーディングテストでの好成績は選考を有利に進める要素になります。
まとめ
コーディングテスト対策は、基礎的なデータ構造とアルゴリズムの理解から始まります。頻出パターンを把握し、LeetCodeやAtCoderで繰り返し問題を解くことが最も効果的な学習法です。
対策のポイントは「パターン認識」と「計算量の意識」の2つです。解けなかった問題は解説を読んで理解し、翌日に再度解くサイクルを回すことで着実に力がつきます。本番では、思考プロセスを明確にし、まず動くコードを書いてから最適化する姿勢が重要です。