面接本番のコーディング:400問解いても落ちる理由
落ちた話には同じ形がよく出てきます。その問題は解いたことがあった。二ポインタの型も知っていた。それでも面接官が「では始めてください」と言った瞬間から、四十分が空のエディタに消えていく。足りなかったのは練習量ではなく、見られながら解く練習でした。
部屋に入ると何が変わるのか
自宅では道具が全部そろっています。制約条件を二度読み返せるし、例まで戻れるし、試して消しても誰にも見えません。体感できる時計もありません。四分詰まっても、その四分は何のコストにもなりません。
面接ではすべてが反転します。詰まっているのが見えている。消した一行も見られている。そして注意の大きな一部が「相手が自分をどう見ているか」の推測に使われ、その分は問題に使えません。
四百問解いた人が百七問目で止まるのは、このためです。問題は新しくありません。条件が新しいのです。
なお日本では、この形式が中心になるのは外資系やグローバル企業、Web系の一部です。受ける会社がどちらかは、応募前に確認しておくだけで準備の配分が変わります。
最初の六十秒が残りを決める
多くの人はすぐ打ち始めます。沈黙が失敗のように感じるからです。しかしこれが最悪の一手です。入力の形を理解する前に方針を決めてしまい、二十分後にそれが違うと分かったときには戻る時間がありません。
評価される人は、最初の一分を声に出して三つのことに使います。問題を自分の言葉で言い直す、効いてくる制約を名指しする、そして何を最適化するのかを言う。「つまり合計が target になる組をすべて求める、配列はソート済み、n は十万まで。なので O(n²) は外れますね」
この一文が同時に三つ働きます。質問を理解したことの確認になり、推論が制約に紐づいていることが伝わり、そして「固まっている」ではなく「落ち着いている」と読まれる六十秒を買えます。
「まだ見えていません」を、崩れずに言う
詰まり方には、落ちる詰まり方と落ちない詰まり方があります。違いは、面接官にあなたの現在地が見えているかどうかです。
黙って詰まるのは致命的です。二分間なにも言わなければ、見ている側は考えているのか溺れているのか判別できず、悪いほうに解釈します。
言葉にした詰まりは生き残りますし、加点されることさえあります。「素朴解が O(n²) なのは明らかです。空間を使って時間を買いたくて、ハッシュマップに手が伸びているのですが、キーに何を取るかがまだ決まっていません」——方向は分かっている、トレードオフも分かっている、足りないのは具体的な一歩だ、と伝わります。面接官がヒントを出すのはたいていこの瞬間です。降参ではなく、本物の質問をしたからです。
アルゴリズムとまったく関係のない部分
百回面接した人に「同じ実力の二人で、合否を分けるのは何か」と聞くと、最適解を挙げる人はほとんどいません。返ってくるのは「この人と四十分一緒に働けるか」に関する何かです。
書く前に境界条件を聞いたか、それとも指摘されてから聞いたか。最初の案が壊れたとき、守ったか、捨てたか。ヒントを受け取って進んだか、それとも反論したか。
これらはLeetCodeには一つもありません。そして全部が評価対象です。
本当に試される側を、どう練習するか
問題数を増やすのは、すでに持っている半分を鍛える行為です。もう半分を鍛えるには、量ではなく条件を変えます。
一人で、声に出して、タイマーを回して解く。最初の十分はばかばかしく感じ、そのあと感じなくなります。誰もいない部屋に向かって自分の推論を話せないなら、他人が見ている前ではもっと話せません。
次に、すでに解いた問題を説明しながら解き直します。目的は答えではありません——答えは知っています。目的は、考えている最中に口から出てくる一文のほうです。
三つの失敗パターン
- 固まる。問題を読んでも何も来ず、沈黙が雪だるま式に重くなる。一秒ごとに次の一秒が苦しくなるのは、「何秒黙っているか」まで考え始めるからです。抜け方は機械的で、ひらめきではありません——恥ずかしくても素朴解を声に出す。「いちばん素直なのは全ペアを見る方法で、O(n²) なので遅いですが、まずそこから始めて改善します」。声に出した素朴解は、常に沈黙に勝ちます。動き出したことで本命が見えることも多い。
- 間違ったほうに賭ける。二分目で方針を固定し、二十五分目に重複が扱えないと気づき、残り時間がない。これはもっと手前で防げます——書く前に、その方針が何を前提にしているかを言う。「値が重複しない前提ですが、保証されますか?」面接官は答えてくれますし、仕掛けられた罠をそこで回避できます。
- 黙って書き直す。十分経って構造が違うと気づき、全選択して消す。外からはパニックに見えます。言葉にすれば判断力に見えます。「コンテナの選択を間違えたので絡まっています。ヒープで書き直します、二分ください」。同じ行動、正反対の読まれ方です。
本当に初見だったとき
問題が本当に未知で、いくら言葉にしても手筋が出てこないことはあります。実力のある人にも起きますし、それだけで不合格になるわけではありません。
効くのは、未知の問題への攻め方を見せることです。実務そのものだからです。最小の入力から手で解く。n=1、n=2、n=3 を書き出し、その間で何が変わるかを見る。やりながら口に出す。法則は問題文をにらむより例から浮かぶほうがずっと多いですし、仮に浮かばなくても、面接官は「重圧の下で規律をもって前進する人」を見たことになります。それが彼らの見に来たものの大半です。
負ける答えは、自信に満ちた作り話です。もっともらしいが動かないアルゴリズムを、ためらいなく提示する。面接官が確かめれば崩れ、そこから先はあなたの発言すべてが疑われます。
計算量は、聞かれる前に言う
コーディングの回はほぼ必ず「計算量は?」で終わります。聞かれてから答えるのは、小さいが避けられる失点です。書いている間コストを考えていなかった、という信号になるからです。
進みながら言う。ハッシュマップに手を伸ばすとき、それが何を買い、何を払うのかを言う。「探索が定数になります。代わりに O(n) の追加メモリを払いますが、n が大きくメモリは制約でないのでここでは妥当です」。こうするとトレードオフは「認めさせられた事実」ではなく「自分がした判断」として記録に残ります。
「もっと速くできますか?」はたいてい引っかけではなく誘いです。最初の反応としては、何を最適化したいのか——時間か、空間か、可読性か——を聞き返すのが最善です。この三つは互いに引っ張り合うので、それに気づいて口に出すこと自体が信号になります。
コパイロットの立ち位置
Interview Copilot は面接を聞き、面接官がまだ話している間に構造を画面に出します——この問題が実際に何を聞いているのか、どの制約がどの方針を消すのか、声に出す価値のあるトレードオフは何か。読み上げるための答えではありません。答えを読み上げれば、見ている人にはすぐ分かります。これは、真っ白になった瞬間に、自分の言葉がまだ戻ってこないときに寄りかかる足場です。
FAQ
LeetCodeを大量に解いても落ちるのはなぜですか?
面接では練習で鍛えられない部分が試されるからです。解きながら話すこと、ヒントの受け取り方、最初の方針が崩れたときの立て直し。一人で時間無制限に正解を出す能力とは別物です。
初見の問題が出たら何と言えばいいですか?
正直に言って素朴解から始めます。「これは初見です。まず動くものを作ってから改善します」。これは普通のことで、想定内でもあります。知っているふりをすると、たいてい沈黙で終わります。
計算量は聞かれる前に言うべきですか?
言うべきです。「ソートがあるので O(n log n)、空間は O(n) です」と先に言えば評価項目が一つ埋まり、出力だけでなくコストを考えている人だと伝わります。
緊張して頭が真っ白になったときは?
ひらめきを待つのではなく、機械的な出口を用意しておきます。素朴すぎる解法でいいので声に出して説明を始める。口を動かすと思考が動き出しますが、沈黙は次の一秒を重くするだけです。