コーディングテストの対策、アルゴリズムを試験と面接で確かめる

回 2-10 道 2 データ構造とアルゴリズム

コーディングテストは、エンジニアの採用で、問題を解くコードを書かせて力を見る試験です。見られるのは、答えが正しいか、読みやすいか、速いかで、計算量を言えるかが速さの説明になります。対策は、問題を読み、例を手で解き、素直な解を書いて計算量を言い、速くし、端の入力を試す、の 6 つの段取りを、時間を決めて繰り返すことです。

見たことのない問題を、6 つの段取りで解き、計算量を言いながら、端の入力まで試して出せるようになります。

30 分で、見たことのない問題を解けますか

コーディングテストは、エンジニアの採用で、問題を解くコードを書かせて力を見る試験です。書類と面接だけでは分からない「実際に書けるか」を、会社が自分の目で確かめるために行います。

たとえば、次の問題が 30 分の時間で出たとします。

「整数の並び nums と、整数 target が渡されます。足すと target になる 2 つの数の位置を返してください。同じ位置の数を 2 回使ってはいけません。そういう組が無ければ None を返してください。」

道 2 で学んだ探索とハッシュテーブルを使えば解けますが、本番では、問題を読み違える、端の入力で落ちる、時間が足りなくなる、のどれかでつまずくことが多くあります。この回では、コーディングテストの形式と見られる点を押さえたうえで、30 分を 6 つの段取りに割って解く練習をします。道 2 の回で学んだことを、試験の形で使えるかを確かめる回です。

コーディングテストはどう行われ、何を見られるのか

コーディングテストは、会社によって形式も時間も違いますが、見られる点はおおむね「正しいか、読みやすいか、速いか」の 3 つにまとまります。

選考の入口に置かれ、形式は 4 つ

コーディングテストは、書類の選考と並んで、選考の早い段階に置かれることが多い試験です。リクルートの中途採用の頁は、エンジニアの採用はコーディング試験から始まると書いています。

形式は、大きく分けて次の 4 つです。

形式どう受けるか気をつける点
オンライン決まった時間内に、ブラウザの画面で解いて出す時間の配り方
持ち帰り問題を受け取り、期限までに出す読みやすさと説明
対面面接官の前で、紙や画面に書きながら話す考えを声に出す
ペアプロ面接官と 2 人で 1 つのコードを書く質問と相談のしかた

持ち帰りの例として、リクルートの中途採用の頁は、問題をメールで送り、2 週間を目安に答えを送るよう書いています。

正しさ、読みやすさ、速さを見られる

見られる点は、答えが合っているか、人が読んで分かるか、速く動くか、の 3 つが中心です。リクルートは採点の基準として、答えの正解の率、分かりやすいコードか、コードのセンス、処理の速さの 4 つを挙げています。

速さは、手元で何秒かかったかより、計算量 (データが増えたときの手間の増え方) で説明します。「この解は O(n²) で、1 万件だと組が約 5,000 万あるので遅い。辞書を使えば O(n) になる」と言えれば、速さを考えたことが伝わります。対面とペアプロでは、答えに着くまでの考えの道筋も見られます。

データの数が増えたとき、O(1)、O(n)、O(n²) の手間がどう増えるかを、ロッカーと本棚と握手の数で比べる図

30 分を 6 つの段取りに割る

初めての問題は、次の 6 つの段取りで解きます。時間の目安は 30 分の問題の場合で、自分の練習で合わせて直してください。

段取りすること目安
1 読む入力、出力、制約 (数の範囲と件数) を書き出す3 分
2 手で解く小さな例を 2 つ、紙の上で解く3 分
3 素直な解全部を試す解を、まず正しく書く7 分
4 計算量を言う素直な解の O を言い、制約で間に合うかを見る2 分
5 速くする道 2 の道具 (探索、辞書、並べ替え) で手間を減らす10 分
6 端を試す空、1 件、同じ値、答えが無い、を試す5 分

素直な解を先に書くのは、3 つの理由からです。1 つ目に、正しい答えを出す物が手元にあると、速い解の答えと照らせます。2 つ目に、時間が足りなくなっても、正しい解を出せます。3 つ目に、どこが遅いかが見えるので、速くする所が決まります。

基本情報 科目B との違い

国家試験の基本情報技術者試験の科目B も、アルゴリズムを読む力を試します。IPA の頁によると、科目B は 100 分で 20 問、多肢選択式です。

コーディングテストとの違いは、選ぶか書くかです。科目B は、擬似言語 (試験のための言語) で書かれた手順を読み、空いた所に入る物や結果を選びます。コーディングテストは、手順を自分で書き、動かして出します。読む力は書く力の土台なので、科目B の過去問で手順を追う練習は、コーディングテストの「手で解く」段取りにも効きます。

動かして確かめる

冒頭の問題を、段取りの 3 から 5 の順に解きます。1 本目は、素直な解と速い解を書き、答えが無いとき (いちばん手間がかかるとき) の手間を数えます。素直な解は、全部の 2 つの組を見ます。速い解は、見た数を辞書に入れておき、target から今の数を引いた数が辞書にあるかを引きます。出力は左から、件数、素直な解で見た組の数、速い解で辞書を引いた回数です。

動かす 素直な解と速い解の手間

python実行可能
出力

▶ 実行ボタンを押すと結果がここに表示されます

実行すると、次の通りに出ます

((0, 1), 1)
((0, 1), 2)
10 45 10
100 4950 100
1000 499500 1000

最初の 2 行は、[2, 7, 11] と 9 の答えです。2 つの解は同じ答え (位置 0 と 1) を返し、素直な解は 1 組目で、速い解は 2 回目に辞書を引いたときに見つけました。答えが無いとき、素直な解が見た組の数は、10 件で 45、100 件で 4,950、1,000 件で 499,500 です。件数が 10 倍になると、ほぼ 100 倍に増えています。n 件から 2 つを選ぶ組の数は n × (n − 1) ÷ 2 なので、計算量は O(n²) です。速い解が辞書を引いた回数は件数と同じで、O(n) です。Python の公式文書は、辞書の in は平均 O(1) としています。

段取りの 4 で言うのは、この差です。制約に「件数は 10 万まで」とあれば、素直な解は 10 万 × 99,999 ÷ 2 で約 50 億の組を見ます。1,000 件のときの 499,500 組の約 1 万倍の手間なので、実行の時間の制限がある試験では、まず間に合いません。速い解なら、辞書を引くのは 10 万回です。

2 本目は、段取りの 6 です。素直な解を正しい答えの基準にして、決まった式で作ったたくさんの入力で、速い解と答えを照らします。答えの位置は 1 つとは限らないので、「返した 2 つの位置の数を足すと target になるか」と「答えがあるかどうか」が一致するかで比べます。

動かす 2 つの解を照らす

python実行可能
出力

▶ 実行ボタンを押すと結果がここに表示されます

実行すると、次の通りに出ます

試した 2400
合わない 0

0 件から 7 件まで、−3 から 3 の数で作った並びを 2,400 通り試し、速い解は 1 回も素直な解と食い違いませんでした。数の範囲を狭くしたのは、同じ値が何度も出るようにして、端の入力を多く作るためです。乱数の代わりに決まった式で数を作っているので、誰が動かしても同じ結果になります。

どこで落ちるのか

コーディングテストで落ちる理由は、問題の読み違い、端の入力、時間切れの 3 つが多くを占めます。どれも、段取りの 1 と 6 と 4 を飛ばしたときに起きます。

「同じ位置を 2 回使わない」を読み落とす

速い解を書くとき、先に全部の数を辞書に入れてから探す形にすると、同じ位置の数を 2 回使ってしまうことがあります。次のコードは、その誤った解を、端の入力を含む 5 つの例で素直な解と照らし、落ちた例を出します。

動かす 端の入力で落ちる

python実行可能
出力

▶ 実行ボタンを押すと結果がここに表示されます

実行すると、次の通りに出ます

落ちた [3] 6 (0, 0)
終わり

[3] と 6 では、3 を 2 回使って (0, 0) を返しました。答えは「組が無い」なので None が正しい答えです。[3, 3] と 6 や [1, 3, 5] と 6 では、別の位置の組を先に見つけるので正しく答えます。ふつうの例の [2, 7, 11] と 9 では正しく答えるので、問題の例だけを試して出すと、この誤りに気づきません。

時間が足りなくなる

時間切れは、速い解を探すことに時間を使いすぎたときに起きます。素直な解を書かずに、いきなり速い解を考え始めると、速い解が思いつかなかったときに何も出せません。段取りの表の通り、素直な解を 10 分以内に出しておけば、残りの時間で速くする所に集中できます。

説明が無い

対面とペアプロでは、黙って書くと、正しい解でも考えの道筋が伝わりません。「全部の組を見ると O(n²) なので、辞書で引いて O(n) にします」のように、段取りの区切りごとに 1 文で言ってから書きます。

練習はどう確かめるのか

練習では、解けたかどうかだけでなく、段取りごとにかかった時間と、落ちた入力を記録して確かめます。

  1. 時計を止めずに 30 分で解き、段取りごとの時間を書き残す。どの段取りで時間を使いすぎたかが分かる
  2. 出す前に、空、1 件、同じ値、答えが無い、の 4 つを必ず試す。上のコードのように、素直な解と照らす試験を書けると強い
  3. 解き終えたら、計算量を 1 文で言う。言えなかったら、その問題の解説を読み、なぜその O になるかを書き写す
  4. 同じ問題を、1 週間あけてもう一度解く。2 回目に 15 分で解けたら、その形は身についている

試験として書くなら、次の形にします。

照らす試験の形

def test_against_brute():
    for a, t in make_cases():
        want = brute(a, t)
        got = fast(a, t)
        assert ok(a, t,
                  got, want)

関わる実例

リクルートの中途採用のコーディング試験 (2026年10月27日に開いた頁)

リクルートは、エンジニアの中途採用の頁で、コーディング試験のやり方と採点の基準と過去の出題例を公開しています。2026年10月27日に開いた時点の頁は、次の通りでした。

  • エンジニアの採用は、コーディング試験から始まる
  • 問題はメールで届き、2 週間を目安に答えを送る。コードの量が大きすぎると評価しきれないことがあるので、できるだけまとめたコードを求めている
  • 言語は Perl、Ruby、Python、Java、Scala、Node.js のどれか。最後に Linux の上で動けば環境は自由
  • コンパイルできない、手に入りにくい版のライブラリを使う、ネットの資源の流用や質問サイトの使用、は採点できない
  • 採点の基準は、答えの正解の率、分かりやすいコードか、コードのセンス、処理の速さの 4 つ
  • 過去の出題例は、3 人がカードを額にかざして自分の順位を推理するゲームを、人数とカードの枚数を変えられる形でプログラムにする問題で、前提として 1 時間半の制限時間が書かれている

この例から分かるのは、正解だけでなく、読みやすさと速さが同じ重さで並んでいることです。この回の段取りの 3 (素直な解で正しさ)、4 と 5 (計算量で速さ)、6 (端の入力) は、この基準のそれぞれに当たります。また、「人数とカードの枚数を変えられる形」が望ましいとあるように、例の数だけで動くコードではなく、入力が変わっても動くコードが求められています。

出典は 〈中途採用〉エントリー・コーディング試験について (リクルート) です。

よくある問い

コーディングテストの難易度はどのくらいですか

会社と形式で大きく違います。多くの問題は、道 2 で学んだ探索、並べ替え、辞書、再帰、動的計画法のどれかを使えば素直に解ける形で出ます。初めは、この回の問題のように、素直な解が O(n²) で、辞書を使うと O(n) になる形から練習するのが近道です。

コーディングテストではどの言語を使えばよいですか

会社が使える言語を決めていることが多いので、まず募集の頁で確かめます。選べるなら、自分がいちばん速く正しく書ける言語を選びます。Python は辞書と並べ替えが標準で使え、短く書けるので、練習にも本番にも向いています。

コーディングテストは調べながら受けられますか

会社によります。リクルートの中途採用の頁は、ネットの資源の流用や質問サイトの使用を採点できない場合に挙げています。言語の公式文書を見てよいかなど、許される範囲は試験の案内に書かれていることが多いので、受ける前に必ず読みます。

コーディングテストで落ちるのはなぜですか

多いのは、問題の読み違い、端の入力の見落とし、時間切れの 3 つです。上の「同じ位置を 2 回使わない」のように、問題の例では正しく動くのに端の入力で落ちる解は、例だけを試して出すと気づけません。素直な解と照らす試験と、段取りごとの時間の目安で防げます。

コーディングテストの練習は何から始めればよいですか

まず、道 2 の 2-1 から 2-9 の回で、探索、並べ替え、辞書、再帰、動的計画法の形を 1 つずつ動かして身につけます。そのあと、この頁の下の「もっと深く」にある道場の 10 問とコーディング面接の 20 問を、30 分の時計で解きます。AtCoder や LeetCode のような、問題を解いて出すと正誤が返る公開の練習サイトも使えます。

確認クイズ

答えだと思う選択肢を押すと、その場で正誤と理由が開きます。4 問すべてに正しく答えると、この回は修了で、石が緑に変わります (この端末のブラウザに残ります)。間違えた問いは、あとから解き直せます。

1 問目

初めての問題を 30 分で解くとき、この回の段取りで最初に書くコードはどれですか。

2 問目

この回の素直な解は、1,000 件で答えが無いとき、2 つの組を何組見ますか。

3 問目

nums = [3]、target = 6 のとき、正しい答えはどれですか。

4 問目

このコードを動かすと何が出ますか。

辞書で探す

def fast(a, t):
    seen = {}
    for i, x in enumerate(a):
        k = t - x  # 相手の数
        if k in seen:
            return (seen[k], i)
        seen[x] = i
    return None


print(fast([1, 4, 4, 2], 8))

説明課題

次の問題を、この回の 6 つの段取りで解く計画を書いてください。「整数の並び nums に、同じ値が 2 回以上出てくるかを True か False で返す」。素直な解と速い解のそれぞれの計算量と、試す端の入力を 3 つ以上入れてください。書いたら、下の模範解答を開いて比べてください。

模範解答

自分の説明を書いてから開いて、比べてください。

この回の先の一歩

コーディングテストで見られる「正しく、読みやすく、速く」は、入社してからのコードレビューで毎日問われる物と同じです。段取りを体に入れておくと、仕事の不具合を直すときにも、例を手で解き、端の入力を試す順で進められます。

もっと深く

この回の続きを、ゆめさくのコースの章や道具で深められます。頁の中の確認クイズに答えたあと、手を動かす量を増やしたいときに使ってください。

一次資料

どれも 2026年10月27日に開いて、題と中身を確かめました。

次へ

道 2 データ構造とアルゴリズムの回

  1. 2-0アルゴリズムとは順次、分岐、反復の 3 つで書く手順頁で読む
  2. 2-1線形探索と二分探索100 万件でも 20 回で見つかる頁で読む
  3. 2-2バブルソートと挿入・選択ソート遅いソート 3 つ、2 倍で約 4 倍頁で読む
  4. 2-3クイックソートとマージソート速いソート 2 つ、平均と最悪頁で読む
  5. 2-4スタックとキュー積む順と並ぶ順頁で読む
  6. 2-5再帰自分を呼んで小さくする頁で読む
  7. 2-6木と二分探索木たどる順、片寄り頁で読む
  8. 2-7ハッシュテーブル鍵から一気に引く、衝突頁で読む
  9. 2-8ダイクストラ法と最短経路点と線、幅優先、重みのある道頁で読む
  10. 2-9動的計画法同じ計算を 2 度しない頁で読む
  11. 2-10試験と面接で確かめる基本情報 科目B、道場 10 問、面接 20 問この回

道 2 の頁へ戻るほかの道を見る