「コーディングテストが全く解けない…」「LeetCodeのEasyすら難しい…」「アルゴリズムが苦手で面接が不安…」
未経験エンジニアの転職活動で、最大の壁となるのが**コーディングテスト(技術試験)**です。書類選考は通過しても、コーディングテストで落とされるケースが非常に多いのが現実です。
私自身、未経験からエンジニア転職を目指した際、最初はLeetCodeのEasy問題すら解けませんでした。しかし、3ヶ月間の集中対策で200問以上を解き、最終的には外資系IT企業のコーディングテストに合格。内定を獲得しました。
この記事では、未経験者でもコーディングテストを突破できる実践的な対策法をお伝えします。
- この記事でわかること
- コーディングテストとは?企業が見ている3つのポイント
- 企業別:コーディングテストの傾向と難易度
- 主要プラットフォーム比較:LeetCode vs HackerRank vs paiza
- 未経験者向け学習ロードマップ【3ヶ月プラン】
- 頻出アルゴリズム・データ構造ベスト10
- LeetCode攻略法:Easy→Medium→Hardへの道
- プログラミング言語別のおすすめと特徴
- コーディングテスト本番での戦略とテクニック
- よくあるミスと対策
- 実際にコーディングテストを突破した体験談
- おすすめ学習リソース【2025年版】
- まとめ:未経験者がコーディングテストを突破する5つのポイント
- 次のステップ:今日から始めよう
- あなたに最適な転職エージェントを見つけよう
- この記事を書いた人
この記事でわかること
- コーディングテストとは何か(企業が何を見ているか)
- 企業別のコーディングテスト傾向と難易度
- LeetCode・HackerRank・paiza等のプラットフォーム比較
- 未経験者向けの学習ロードマップ(3ヶ月プラン)
- 頻出アルゴリズム・データ構造の解説
- LeetCode攻略法(Easy→Medium→Hardへの道)
- コーディングテスト本番での戦略とテクニック
- 言語別のおすすめ(Python・JavaScript・Java等)
- 実際にコーディングテストを突破した体験談
所要時間:15分で読めます
コーディングテストとは?企業が見ている3つのポイント
コーディングテストの定義
**コーディングテスト(Coding Test)**とは、企業が採用選考の一環として実施するプログラミング能力を測る試験です。主にアルゴリズムとデータ構造の理解度を評価します。
企業がコーディングテストで見ている3つのポイント
1. 問題解決能力
何を見ているか:
- 問題を正しく理解できるか
- 論理的に考えられるか
- 制約条件を把握できるか
- 複数のアプローチを考えられるか
評価基準:
- 正解にたどり着くまでの思考プロセス
- エッジケース(特殊ケース)への対処
- 時間・空間計算量の考慮
2. コーディングスキル
何を見ているか:
- 実装速度
- コードの可読性
- バグの少なさ
- 適切な変数名・関数名
評価基準:
- 動作するコードが書けるか
- クリーンなコードか
- テストケースが通るか
3. コンピュータサイエンスの基礎知識
何を見ているか:
- データ構造の理解(配列、連結リスト、ツリー、グラフ等)
- アルゴリズムの理解(ソート、探索、動的計画法等)
- 計算量の理解(O記法)
評価基準:
- 適切なデータ構造を選択できるか
- 効率的なアルゴリズムを実装できるか
- Big O記法で計算量を説明できるか
企業別:コーディングテストの傾向と難易度
GAFAM(Google、Apple、Facebook、Amazon、Microsoft)
実施形式: オンラインコーディングテスト + 技術面接でのライブコーディング
難易度: ★★★★★(非常に難しい)
問題レベル: LeetCode Medium〜Hard
出題範囲:
- アルゴリズム:動的計画法、グラフ探索、二分探索、バックトラッキング
- データ構造:ツリー、グラフ、ヒープ、ハッシュテーブル
- 計算量:O(n log n)以下の最適化が求められる
特徴:
- 45〜60分で2〜3問
- 最適解が求められる(Brute Forceでは不合格)
- 英語でのコミュニケーション能力も評価
合格ライン:
- オンラインテスト:2問中2問正解
- 技術面接:3〜5回の面接で計15問程度出題、70%以上正解
未経験者の現実: 正直、未経験者がいきなりGAFAMのコーディングテストに合格するのは極めて困難です。まずは日系企業やスタートアップで実務経験を積んでから挑戦するのが現実的です。
外資系IT企業(SAP、Oracle、Salesforce等)
実施形式: オンラインコーディングテスト(HackerRank・Codility等)
難易度: ★★★★☆(難しい)
問題レベル: LeetCode Easy〜Medium
出題範囲:
- 配列操作、文字列処理
- 簡単な動的計画法
- ツリー・グラフの基礎
特徴:
- 60〜90分で2〜3問
- すべて正解しなくてもOK(60〜70%で合格)
- コードの可読性も評価
合格ライン: 2〜3問中2問正解、または部分点で合計60%以上
メガベンチャー(楽天、メルカリ、LINE等)
実施形式: オンラインコーディングテスト + 技術面接
難易度: ★★★☆☆(中程度)
問題レベル: LeetCode Easy〜Medium
出題範囲:
- 配列操作、文字列処理
- ハッシュテーブル
- 簡単なアルゴリズム
特徴:
- 企業によって難易度にばらつき
- 楽天:比較的易しい(HackerRank Easy程度)
- メルカリ:Medium〜Hard(競技プログラミング経験者有利)
合格ライン: 60〜80%の正解率
日系大手IT企業(NTTデータ、富士通、NEC等)
実施形式: SPI・CAB・GAB + 簡単なプログラミングテスト
難易度: ★★☆☆☆(易しい)
問題レベル: 基本的なプログラミング能力
出題範囲:
- 簡単なループ処理
- 配列の操作
- 文字列処理
- FizzBuzzレベル
特徴:
- アルゴリズムよりも「書ける」ことを重視
- 言語は自由(Java、Python、JavaScript等)
- 完璧でなくても合格可能
合格ライン: 50%以上の正解率
スタートアップ・Web系企業
実施形式: 企業による(実施しない企業も多い)
難易度: ★★☆☆☆〜★★★☆☆(易〜中)
問題レベル: LeetCode Easy程度、または実務に近い課題
出題範囲:
- Web APIの実装
- データベース操作
- 簡単なアルゴリズム
特徴:
- 競技プログラミング的な問題は少ない
- 実務に近い課題(Todoアプリ、簡単なAPI実装等)
- ポートフォリオ重視で、コーディングテストを実施しない企業も
合格ライン: 企業による
主要プラットフォーム比較:LeetCode vs HackerRank vs paiza
LeetCode(リートコード)
URL: https://leetcode.com/
特徴:
- 世界最大のコーディング練習プラットフォーム
- 問題数:3,000問以上
- GAFAM対策に最適
- 英語のみ(日本語なし)
難易度:
- Easy:800問以上
- Medium:1,600問以上
- Hard:600問以上
料金:
- 無料プラン:1,900問以上解ける
- Premium:$35/月(全問解ける、企業別問題リスト、動画解説)
メリット:
- GAFAMの実際の面接問題が豊富
- DiscussでSolutionが見られる
- コミュニティが活発
デメリット:
- 日本語がない
- 初心者には難しい
- UIがシンプルすぎる
おすすめ度: ★★★★★(外資系志望者は必須)
HackerRank(ハッカーランク)
URL: https://www.hackerrank.com/
特徴:
- 企業の採用試験に使われることが多い
- 問題数:約1,000問
- アルゴリズム、データ構造、SQL、AI等幅広い
難易度:
- Easy:比較的易しい
- Medium:LeetCode Easyと同等
- Hard:LeetCode Mediumと同等
料金:
- 完全無料
メリット:
- UIが見やすい
- ヒント機能がある
- 企業の実際の採用試験として使われる
デメリット:
- LeetCodeより問題数が少ない
- 日本語がない
おすすめ度: ★★★★☆(外資系・メガベンチャー志望者)
paiza(パイザ)
URL: https://paiza.jp/
特徴:
- 日本最大のコーディング練習プラットフォーム
- 問題数:約500問
- 日本語対応
- ランク制度(S・A・B・C・D・E)
難易度:
- Dランク:初心者向け
- Cランク:基礎固め
- Bランク:日系企業の採用試験レベル
- Aランク:難しい
- Sランク:非常に難しい
料金:
- 無料プラン:約200問
- 有料プラン:1,078円/月(全問解ける)
メリット:
- 日本語で学べる
- 動画解説が丁寧
- 日系企業の転職に直結
デメリット:
- 国際的な知名度は低い
- GAFAMレベルの問題は少ない
おすすめ度: ★★★★★(日系企業・未経験者向け)
AtCoder(アットコーダー)
URL: https://atcoder.jp/
特徴:
- 日本の競技プログラミングサイト
- 問題数:5,000問以上(過去問含む)
- レーティング制度
難易度:
- ABC:初心者向け
- ARC:中級者向け
- AGC:上級者向け
料金:
- 完全無料
メリット:
- 日本語対応
- 解説が丁寧
- コミュニティが活発
デメリット:
- 競技プログラミング色が強い
- 実務とは乖離がある
おすすめ度: ★★★☆☆(競技プログラミングに興味がある人)
Codility(コーディリティ)
URL: https://www.codility.com/
特徴:
- 企業の採用試験専用プラットフォーム
- 問題数:公開問題は約100問
料金:
- Lessonsは無料
メリット:
- 企業の実際の採用試験
- 解説が丁寧
デメリット:
- 問題数が少ない
- 練習用には向かない
おすすめ度: ★★★☆☆(採用試験対策)
未経験者向け学習ロードマップ【3ヶ月プラン】
前提:プログラミング基礎は習得済み
このロードマップは、以下の前提で進めます:
- プログラミング言語の基礎は理解している(Python、JavaScript、Java等)
- if文、for文、関数等の基本構文が書ける
- 簡単なプログラムが書ける
もしまだこのレベルに達していない場合は、先にProgateやドットインストール等で基礎を固めましょう。
1ヶ月目:データ構造の基礎を固める
目標: 基本的なデータ構造を理解し、使いこなせるようになる
学習内容:
Week 1:配列とハッシュテーブル
- 配列の基本操作(追加、削除、検索)
- 二次元配列
- ハッシュマップ(辞書)の使い方
練習問題(paiza Dランク・LeetCode Easy):
- Two Sum(LeetCode #1)
- Contains Duplicate(LeetCode #217)
- 配列の合計(paiza D級)
Week 2:文字列処理
- 文字列の反転、分割、結合
- 文字列検索
- 正規表現の基礎
練習問題:
- Valid Anagram(LeetCode #242)
- Reverse String(LeetCode #344)
- 文字列の操作(paiza D級)
Week 3:スタックとキュー
- スタックの実装と使い方
- キューの実装と使い方
- 実務での活用例
練習問題:
- Valid Parentheses(LeetCode #20)
- Implement Stack using Queues(LeetCode #225)
Week 4:連結リスト
- 連結リストの基礎
- ノードの追加・削除
- リバース操作
練習問題:
- Reverse Linked List(LeetCode #206)
- Merge Two Sorted Lists(LeetCode #21)
1ヶ月目の目標達成度:
- paiza Cランク取得
- LeetCode Easy問題を30問解く
2ヶ月目:アルゴリズムの基礎を学ぶ
目標: 頻出アルゴリズムを理解し、実装できるようになる
Week 5:ソートと探索
- バブルソート、選択ソート、挿入ソート
- 二分探索
- 計算量の理解(Big O記法)
練習問題:
- Binary Search(LeetCode #704)
- Search Insert Position(LeetCode #35)
- ソートアルゴリズム実装(paiza C級)
Week 6:再帰
- 再帰の基本
- ベースケースとリカーシブケース
- スタックオーバーフローの回避
練習問題:
- Fibonacci Number(LeetCode #509)
- Climbing Stairs(LeetCode #70)
Week 7:ツリー
- 二分木の基礎
- 木の走査(前順、中順、後順)
- 二分探索木
練習問題:
- Maximum Depth of Binary Tree(LeetCode #104)
- Invert Binary Tree(LeetCode #226)
Week 8:動的計画法(入門)
- メモ化
- ボトムアップアプローチ
- 典型問題
練習問題:
- Climbing Stairs(LeetCode #70)再挑戦
- House Robber(LeetCode #198)
2ヶ月目の目標達成度:
- paiza Bランク取得
- LeetCode Easy問題を計60問解く
- LeetCode Medium問題を10問解く
3ヶ月目:実戦演習と模擬試験
目標: 本番形式での演習と弱点克服
Week 9:頻出問題の総復習
- Two Pointer法
- Sliding Window法
- 貪欲法
練習問題:
- Best Time to Buy and Sell Stock(LeetCode #121)
- Longest Substring Without Repeating Characters(LeetCode #3)
Week 10:企業別問題演習
- 志望企業の頻出問題リストを解く
- LeetCode Premiumで企業別フィルタ活用
- 過去問の収集と演習
Week 11:模擬試験
- 時間を計って本番形式で演習
- 60分で2〜3問を解く練習
- 振り返りと改善
Week 12:弱点克服
- 解けなかった問題の復習
- 苦手なデータ構造・アルゴリズムの強化
- コーディング速度の向上
3ヶ月目の目標達成度:
- LeetCode Easy問題:100問以上
- LeetCode Medium問題:30問以上
- paiza Bランク以上
- 模擬試験で60%以上の正解率
頻出アルゴリズム・データ構造ベスト10
1. 配列(Array)
重要度: ★★★★★(最重要)
出題頻度: 90%以上
押さえるべきポイント:
- インデックスアクセス:O(1)
- 要素追加・削除:O(n)
- 検索:O(n)(ソート済みならO(log n))
頻出問題パターン:
- Two Sum系
- 部分配列の合計
- 配列の回転
代表的な問題:
# Two Sum(LeetCode #1)
def twoSum(nums, target):
seen = {}
for i, num in enumerate(nums):
complement = target - num
if complement in seen:
return [seen[complement], i]
seen[num] = i
2. ハッシュテーブル(Hash Table / Dictionary)
重要度: ★★★★★
出題頻度: 80%以上
押さえるべきポイント:
- 検索・追加・削除:平均O(1)
- キーと値のペア管理
- 衝突解決
頻出問題パターン:
- 重複検出
- 頻度カウント
- Two Sum系
代表的な問題:
# Contains Duplicate(LeetCode #217)
def containsDuplicate(nums):
seen = set()
for num in nums:
if num in seen:
return True
seen.add(num)
return False
3. 文字列(String)
重要度: ★★★★★
出題頻度: 70%以上
押さえるべきポイント:
- 文字列の不変性(Immutable)
- スライシング
- 文字列検索
頻出問題パターン:
- 回文判定
- アナグラム
- 部分文字列
代表的な問題:
# Valid Palindrome(LeetCode #125)
def isPalindrome(s):
s = ''.join(c.lower() for c in s if c.isalnum())
return s == s[::-1]
4. 連結リスト(Linked List)
重要度: ★★★★☆
出題頻度: 50%
押さえるべきポイント:
- ノードの構造
- ポインタ操作
- リバース、マージ
頻出問題パターン:
- リストの反転
- サイクル検出
- 2つのリストのマージ
代表的な問題:
# Reverse Linked List(LeetCode #206)
def reverseList(head):
prev = None
current = head
while current:
next_node = current.next
current.next = prev
prev = current
current = next_node
return prev
5. スタック(Stack)とキュー(Queue)
重要度: ★★★★☆
出題頻度: 40%
押さえるべきポイント:
- スタック:LIFO(Last In First Out)
- キュー:FIFO(First In First Out)
- 実装方法(配列、連結リスト)
頻出問題パターン:
- 括弧の対応チェック
- 計算機の実装
- BFS(幅優先探索)
代表的な問題:
# Valid Parentheses(LeetCode #20)
def isValid(s):
stack = []
mapping = {')': '(', '}': '{', ']': '['}
for char in s:
if char in mapping:
if not stack or stack.pop() != mapping[char]:
return False
else:
stack.append(char)
return not stack
6. 二分探索(Binary Search)
重要度: ★★★★★
出題頻度: 60%
押さえるべきポイント:
- 計算量:O(log n)
- ソート済み配列が前提
- 境界条件の扱い
頻出問題パターン:
- 値の検索
- 挿入位置の特定
- 範囲検索
代表的な問題:
# Binary Search(LeetCode #704)
def search(nums, target):
left, right = 0, len(nums) - 1
while left <= right:
mid = (left + right) // 2
if nums[mid] == target:
return mid
elif nums[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
7. ツリー(Tree)
重要度: ★★★★☆
出題頻度: 50%
押さえるべきポイント:
- 二分木の構造
- 木の走査(DFS、BFS)
- 二分探索木(BST)
頻出問題パターン:
- 木の深さ
- 木の走査
- 部分木の検証
代表的な問題:
# Maximum Depth of Binary Tree(LeetCode #104)
def maxDepth(root):
if not root:
return 0
return 1 + max(maxDepth(root.left), maxDepth(root.right))
8. グラフ(Graph)
重要度: ★★★☆☆
出題頻度: 30%(外資系は高い)
押さえるべきポイント:
- グラフの表現方法(隣接リスト、隣接行列)
- DFS(深さ優先探索)
- BFS(幅優先探索)
頻出問題パターン:
- 経路探索
- 連結成分
- サイクル検出
9. 動的計画法(Dynamic Programming)
重要度: ★★★★☆
出題頻度: 40%(外資系は高い)
押さえるべきポイント:
- メモ化(Top-Down)
- ボトムアップ
- 部分問題への分解
頻出問題パターン:
- フィボナッチ数列
- ナップサック問題
- 最長部分列
代表的な問題:
# Climbing Stairs(LeetCode #70)
def climbStairs(n):
if n <= 2:
return n
dp = [0] * (n + 1)
dp[1], dp[2] = 1, 2
for i in range(3, n + 1):
dp[i] = dp[i-1] + dp[i-2]
return dp[n]
10. Two Pointer / Sliding Window
重要度: ★★★★☆
出題頻度: 50%
押さえるべきポイント:
- 2つのポインタで効率化
- 計算量をO(n²)からO(n)に削減
- 配列・文字列問題で頻出
代表的な問題:
# Best Time to Buy and Sell Stock(LeetCode #121)
def maxProfit(prices):
min_price = float('inf')
max_profit = 0
for price in prices:
min_price = min(min_price, price)
max_profit = max(max_profit, price - min_price)
return max_profit
LeetCode攻略法:Easy→Medium→Hardへの道
LeetCode Easy(初級)攻略
目標解答数: 50〜100問
特徴:
- 基本的なデータ構造の理解で解ける
- アルゴリズムは単純
- 15〜30分で解けるレベル
おすすめ問題リスト(厳選20問):
1. Two Sum(#1)
2. Reverse String(#344)
3. FizzBuzz(#412)
4. Single Number(#136)
5. Maximum Subarray(#53)
6. Move Zeroes(#283)
7. Best Time to Buy and Sell Stock(#121)
8. Valid Parentheses(#20)
9. Merge Two Sorted Lists(#21)
10. Climbing Stairs(#70)
11. Binary Search(#704)
12. First Bad Version(#278)
13. Ransom Note(#383)
14. Reverse Linked List(#206)
15. Maximum Depth of Binary Tree(#104)
16. Invert Binary Tree(#226)
17. Symmetric Tree(#101)
18. Linked List Cycle(#141)
19. Min Stack(#155)
20. Intersection of Two Arrays(#349)
攻略のコツ:
- 問題を読んで5分考える
- 分からなければDiscussで解法を見る
- 理解したら自分で実装
- 翌日もう一度解く(復習)
LeetCode Medium(中級)攻略
目標解答数: 30〜50問
特徴:
- 複数のデータ構造・アルゴリズムの組み合わせ
- 最適解を求められる
- 30〜60分で解けるレベル
おすすめ問題リスト(厳選15問):
1. Add Two Numbers(#2)
2. Longest Substring Without Repeating Characters(#3)
3. Container With Most Water(#11)
4. 3Sum(#15)
5. Letter Combinations of a Phone Number(#17)
6. Generate Parentheses(#22)
7. Search in Rotated Sorted Array(#33)
8. Permutations(#46)
9. Group Anagrams(#49)
10. Maximum Product Subarray(#152)
11. House Robber(#198)
12. Course Schedule(#207)
13. Implement Trie(#208)
14. Kth Smallest Element in a BST(#230)
15. Product of Array Except Self(#238)
攻略のコツ:
- まずはBrute Force(力技)で解法を考える
- 計算量を分析(O(n²)など)
- 最適化を考える(ハッシュテーブル、Two Pointer等)
- 時間がかかってもOK(じっくり考える)
LeetCode Hard(上級)
目標解答数: 10〜20問(未経験者は無理に解かなくてOK)
特徴:
- 高度なアルゴリズム・データ構造の知識が必要
- 複雑な実装
- 1〜2時間かかることも
おすすめ問題リスト(厳選5問):
1. Median of Two Sorted Arrays(#4)
2. Trapping Rain Water(#42)
3. Merge k Sorted Lists(#23)
4. Word Ladder(#127)
5. Longest Valid Parentheses(#32)
未経験者へのアドバイス: GAFAM等の超難関企業以外は、Hard問題が出題されることは稀です。まずはEasy・Mediumを確実に解けるようにしましょう。
プログラミング言語別のおすすめと特徴
Python(最もおすすめ)
おすすめ度: ★★★★★
メリット:
- コードが短く書ける
- 標準ライブラリが豊富
- 擬似コードに近く読みやすい
- 初心者でも習得しやすい
デメリット:
- 実行速度が遅い(ただしコーディングテストでは問題なし)
- 細かい制御が難しい
コード例(Two Sum):
def twoSum(nums, target):
seen = {}
for i, num in enumerate(nums):
if target - num in seen:
return [seen[target - num], i]
seen[num] = i
Pythonの強み:
- リスト内包表記で簡潔に書ける
collectionsモジュール(Counter、defaultdict等)heapq(優先度付きキュー)
向いている人:
- コーディング速度を重視
- アルゴリズムに集中したい
- 未経験者
JavaScript
おすすめ度: ★★★★☆
メリット:
- フロントエンドエンジニア志望者に最適
- Web業界では需要が高い
- 柔軟な書き方ができる
デメリット:
- 配列操作がPythonより冗長
- 型がないため注意が必要
コード例(Two Sum):
function twoSum(nums, target) {
const seen = new Map();
for (let i = 0; i < nums.length; i++) {
const complement = target - nums[i];
if (seen.has(complement)) {
return [seen.get(complement), i];
}
seen.set(nums[i], i);
}
}
JavaScriptの強み:
map、filter、reduce等の高階関数Set、Mapが標準装備
向いている人:
- フロントエンドエンジニア志望
- Web系企業志望
Java
おすすめ度: ★★★★☆
メリット:
- 企業での採用実績が多い
- 型安全
- 大規模システムで使われる
デメリット:
- コードが長くなりがち
- 書くのに時間がかかる
コード例(Two Sum):
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> seen = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
int complement = target - nums[i];
if (seen.containsKey(complement)) {
return new int[]{seen.get(complement), i};
}
seen.put(nums[i], i);
}
return new int[]{};
}
向いている人:
- SIer・大手企業志望
- Androidアプリ開発志望
- 型安全性を重視
C++
おすすめ度: ★★★☆☆(競技プログラミング経験者)
メリット:
- 実行速度が最速
- 競技プログラミングでは標準
デメリット:
- 構文が複雑
- メモリ管理が必要
- 初心者には難しい
向いている人:
- 競技プログラミング経験者
- ゲーム開発志望
- 組み込み系志望
結論:未経験者にはPythonがおすすめ
理由:
- コーディング速度が速い
- 可読性が高い
- 標準ライブラリが豊富
- 学習コストが低い
コーディングテスト本番での戦略とテクニック
本番前の準備(前日〜当日)
前日にやるべきこと
1. 環境確認
- PCの動作確認
- ネット回線の速度確認
- 使用するプラットフォーム(HackerRank等)の操作確認
- ログイン情報の確認
2. 基本問題の復習
- Easy問題を5〜10問解く
- よく使うアルゴリズムの復習
- コーディングの感覚を取り戻す
3. 体調管理
- 十分な睡眠(7時間以上)
- カフェイン摂取は控えめに
- 前日の夜遅くまで勉強しない
当日にやるべきこと
テスト開始30分前:
- トイレを済ませる
- 水分補給
- 深呼吸でリラックス
- 使用する言語の構文を軽く復習
環境準備:
- 静かな場所を確保
- スマホは電源OFF
- メモ用紙とペンを用意
- 時計を見えるところに置く
テスト中の時間配分戦略
60分・2問の場合(典型的なパターン):
問題1:25分(Easy〜Medium)
- 5分:問題理解・エッジケース洗い出し
- 15分:実装
- 5分:テスト・デバッグ
問題2:25分(Medium)
- 5分:問題理解
- 15分:実装
- 5分:テスト・デバッグ
予備時間:10分(見直し・部分点狙い)
重要な原則:
- 1問に30分以上かけない
- 詰まったら次の問題に移る
- 部分点を狙う戦略も有効
問題を解く手順(5ステップ)
Step 1:問題を正確に理解する(3〜5分)
やるべきこと:
- 問題文を2回読む
- 入力・出力の形式を確認
- 制約条件を確認(配列のサイズ、値の範囲等)
- サンプルケースを手で追う
チェックリスト:
□ 入力は何か?
□ 出力は何か?
□ 制約条件は?
□ エッジケースは?(空配列、負の数、重複等)
Step 2:アプローチを考える(3〜5分)
思考プロセス:
- まずはBrute Force(力技)を考える
- 計算量を分析
- 最適化を考える
紙に書き出す:
アプローチ1:二重ループ → O(n²)
アプローチ2:ハッシュテーブル → O(n)
→ アプローチ2を採用
Step 3:実装する(10〜20分)
コーディングのコツ:
- 関数名・変数名は分かりやすく
- コメントを書く(後で見返せる)
- エッジケースの処理を忘れずに
テンプレート:
def solution(input_data):
# エッジケースの処理
if not input_data:
return []
# メインロジック
result = []
# ...
return result
Step 4:テストする(3〜5分)
テストケース:
- サンプルケース
- エッジケース(空配列、1要素、最大値等)
- 自分で考えたケース
デバッグ方法:
- print文でデバッグ
- 変数の値を確認
- ステップバイステップで追う
Step 5:見直し・改善(残り時間)
チェック項目:
□ すべてのテストケースが通るか
□ 計算量は最適か
□ コードに冗長な部分はないか
□ エッジケースの処理は完璧か
詰まった時の対処法
パターン1:何も思いつかない
対処法:
- サンプルケースを手で解く
- パターンを見つける
- 似た問題を思い出す
- まずはBrute Forceで実装
パターン2:実装が進まない
対処法:
- 部分的に実装する
- 簡単な部分から書く
- コメントで疑似コードを書く
- 完璧を目指さず部分点を狙う
パターン3:テストが通らない
対処法:
- エッジケースを確認
- 境界条件を確認(<= と < の違い等)
- オフバイワンエラーを疑う
- print文でデバッグ
部分点を狙う戦略
重要な考え方: 完璧な解答が書けなくても、部分点で合格できることがあります。
部分点の取り方:
- 小さいケースだけ正解:n <= 100なら通るアルゴリズムを書く
- 70%のケースが通る:エッジケースは無視して基本ケースだけ対応
- コメントで考えを示す:実装できなくてもアプローチを書く
例:
# 最適解(O(n log n))の実装は時間がかかるため、
# まずはO(n²)の解法で部分点を狙う
def solution(nums):
# TODO: 最適化(時間があれば)
result = []
for i in range(len(nums)):
for j in range(i+1, len(nums)):
# ...
return result
よくあるミスと対策
ミス1:問題を正確に理解していない
失敗例: 「配列の要素の合計」を求める問題なのに、「最大値」を返してしまう。
対策:
- 問題文を2回読む
- 入力・出力の例を手で追う
- 不明点があればすぐに質問(質問可能な場合)
ミス2:エッジケースを考慮していない
失敗例: 空配列、1要素の配列、負の数等の特殊ケースでバグる。
対策: 実装前にエッジケースをリストアップ:
□ 空配列/空文字列
□ 1要素だけ
□ すべて同じ要素
□ 負の数/ゼロ
□ 最大値/最小値
□ 重複がある場合
ミス3:計算量を考慮していない
失敗例: O(n²)のアルゴリズムで実装したら、大きいケースでタイムアウト。
対策:
- 制約条件を確認(n <= 10⁵なら O(n log n)以下が必要)
- 計算量の目安を知っておく
計算量の目安:
n <= 10: O(n!) でもOK
n <= 20: O(2ⁿ) でもOK
n <= 100: O(n³) でもOK
n <= 1,000: O(n²) でもOK
n <= 10,000: O(n²) はギリギリ
n <= 100,000: O(n log n) が必要
n <= 1,000,000: O(n) が必要
ミス4:オフバイワンエラー
失敗例: 配列のインデックスが1つずれる。
対策:
- 境界条件を慎重に書く(
< nか<= nか) - ループの範囲を確認(
range(n)は0〜n-1) - 紙に書いて確認
ミス5:変数名・関数名が不適切
失敗例: a、b、temp等の意味不明な変数名。
対策: 意味のある変数名を使う:
# NG
def f(a, b):
c = a + b
return c
# OK
def calculate_sum(num1, num2):
total = num1 + num2
return total
実際にコーディングテストを突破した体験談
体験談1:LeetCode 100問で外資系内定(27歳・男性)
プロフィール:
- 前職:営業職(非IT)
- プログラミング経験:プログラミングスクール6ヶ月
- 転職先:外資系IT企業
コーディングテスト対策:
- 期間:3ヶ月
- LeetCode:Easy 70問、Medium 30問
- paiza:Bランク取得
- 毎日2〜3時間学習
選考プロセス:
- オンラインコーディングテスト(HackerRank・60分・2問)
- 問題1(Easy):配列操作 → 完答
- 問題2(Medium):動的計画法 → 70%正解
- 技術面接(ライブコーディング)
- LeetCode Mediumレベルの問題 → 30分で正解
- 最終面接
- システム設計の質問
コメント: 「LeetCodeのEasy・Mediumを繰り返し解いたことで、パターンが見えてきました。本番では緊張しましたが、練習通りに解くことができました。」
体験談2:paizaでランクアップ→内定(24歳・女性)
プロフィール:
- 前職:事務職
- プログラミング経験:独学6ヶ月
- 転職先:Web系ベンチャー企業
コーディングテスト対策:
- 期間:2ヶ月
- paiza:Dランク→Cランク→Bランク
- LeetCode:Easy 30問のみ
- 毎日1〜2時間学習
選考プロセス:
- paizaのスキルチェック(Bランク)
- 実技試験(簡単なWebアプリ作成)
- 技術面接(コードレビュー)
コメント: 「paizaは日本語で解説が丁寧なので、未経験者にはとても助かりました。Bランクを取得したことで、自信がつきました。」
体験談3:競技プログラミング経験なしで内定(29歳・男性)
プロフィール:
- 前職:小売業の店長
- プログラミング経験:独学1年
- 転職先:日系大手IT企業
コーディングテスト対策:
- 期間:1ヶ月(短期集中)
- paiza:Cランク
- LeetCode:Easy 20問のみ
- 「エンジニアとしてのポテンシャル」を重視してもらえた
選考プロセス:
- SPIテスト
- 簡単なプログラミングテスト(FizzBuzzレベル)
- ポートフォリオ審査
- 最終面接
コメント: 「日系大手は、コーディングテストよりもポートフォリオと人物評価を重視してくれました。完璧を目指さなくても、基礎ができていればチャンスはあります。」
体験談4:働きながら3ヶ月で準備(32歳・男性)
プロフィール:
- 前職:製造業の技術者
- プログラミング経験:副業で1年
- 転職先:メガベンチャー
コーディングテスト対策:
- 期間:3ヶ月(働きながら)
- 平日:朝1時間、夜1時間
- 休日:4〜6時間
- LeetCode:Easy 50問、Medium 20問
- AtCoder:茶色ランク
選考プロセス:
- オンラインコーディングテスト(60分・3問)
- 問題1(Easy):完答
- 問題2(Medium):完答
- 問題3(Medium):50%正解
- 技術面接2回
- 最終面接
コメント: 「働きながらでも、毎日2時間の学習を継続すれば十分戦えます。朝活でLeetCodeを解くのが習慣になりました。」
体験談5:アルゴリズムが苦手でも合格(26歳・女性)
プロフィール:
- 前職:デザイナー
- プログラミング経験:プログラミングスクール3ヶ月
- 転職先:Web系スタートアップ
コーディングテスト対策:
- 期間:1ヶ月半
- paiza:Cランク
- LeetCode:Easy 15問のみ
- 実務的な課題(WebAPI実装)に注力
選考プロセス:
- 実技試験(簡単なREST API実装)
- コードレビュー面接
- 最終面接
コメント: 「スタートアップは競技プログラミング的な問題よりも、実務に近い課題を出すことが多いです。LeetCodeが苦手でも、実装力があれば評価してもらえます。」
おすすめ学習リソース【2025年版】
書籍
『問題解決力を鍛える!アルゴリズムとデータ構造』
価格: 3,278円
特徴:
- 日本語で学べる定番書
- 基礎から応用まで体系的
- 競技プログラミングの視点
対象: 初心者〜中級者
『世界で闘うプログラミング力を鍛える本』
価格: 3,960円
特徴:
- 通称「グリーン本」
- GAFAM対策の定番
- 英語版はCracking the Coding Interview
対象: 中級者〜上級者
『プログラミングコンテストチャレンジブック』
価格: 3,608円
特徴:
- 通称「蟻本」
- 競技プログラミングのバイブル
- 難易度高め
対象: 中級者〜上級者(競プロ志望)
オンライン学習サイト
Udemy(コーディング面接対策コース)
おすすめコース:
- 『Master the Coding Interview: Data Structures + Algorithms』(英語)
- 『JavaScript Algorithms and Data Structures Masterclass』(英語)
料金: セール時1,500円程度(定価24,000円)
特徴:
- 動画で分かりやすい
- 体系的に学べる
- 買い切り型
Coursera(アルゴリズムコース)
おすすめコース:
- 『Algorithms Specialization by Stanford』(英語)
- 『Data Structures and Algorithms Specialization』(英語)
料金: 月額7,000円(無料体験7日間)
特徴:
- 大学レベルの講義
- 修了証がもらえる
- 英語力も同時に鍛えられる
YouTube(無料)
日本語チャンネル
- paiza公式チャンネル: 問題解説が丁寧
- キノコード: Pythonでのアルゴリズム解説
- プログラミングチャンネル by 雅也: 初心者向け
英語チャンネル
- NeetCode: LeetCode解説(非常に分かりやすい)
- Back To Back SWE: アルゴリズム解説
- Tech With Tim: コーディング面接対策
Discord / Slack コミュニティ
LeetCode Japan
特徴:
- 日本人のLeetCodeユーザーコミュニティ
- 分からない問題を質問できる
- モチベーション維持
アルゴリズム勉強会
特徴:
- オンライン勉強会
- 定期的に開催
- 初心者歓迎
まとめ:未経験者がコーディングテストを突破する5つのポイント
1. 焦らず基礎から固める
いきなりLeetCode Mediumに挑戦するのではなく、まずはデータ構造の基礎(配列、ハッシュテーブル、連結リスト等)をしっかり理解しましょう。
2. 毎日継続する
1日2〜3時間を3ヶ月継続すれば、未経験者でも十分戦えるレベルに到達します。週末だけの学習より、毎日少しずつが効果的です。
3. paizaで自信をつける
LeetCodeは難しすぎると感じたら、まずはpaizaでCランク→Bランクを目指しましょう。日本語で学べるため、初心者には最適です。
4. パターンを覚える
コーディングテストは、典型的なパターンの組み合わせです。頻出パターン(Two Sum、DFS、BFS、動的計画法等)を覚えることで、解答速度が上がります。
5. 完璧を目指さない
すべての問題を完答する必要はありません。60〜70%の正解率で合格できる企業も多いです。部分点を狙う戦略も有効です。
次のステップ:今日から始めよう
コーディングテスト対策は、今日から始められます。まずは以下のステップで進めましょう。
今日やること:
- paizaに登録してスキルチェックを受ける(自分のレベルを把握)
- LeetCodeに登録してEasy問題を1問解く
- 3ヶ月の学習計画を立てる
1週間後の目標:
- paiza D級問題を10問解く
- LeetCode Easy問題を5問解く
- データ構造の基礎を復習
1ヶ月後の目標:
- paiza Cランク取得
- LeetCode Easy問題を30問解く
- ハッシュテーブル、スタック、キューを使いこなせる
3ヶ月後の目標:
- paiza Bランク取得
- LeetCode Easy 100問、Medium 30問
- 志望企業のコーディングテストに挑戦
関連記事:
- 未経験エンジニア向け転職エージェント徹底比較【2025年最新】:技術力を評価してくれるエージェント
- 技術面接でよく聞かれる質問50選と回答例【2025年最新】:コーディングテスト後の面接対策
- ポートフォリオの作り方【未経験者向け実例付き】:コーディングスキルをアピール
- 独学3ヶ月でエンジニア転職した勉強法【コスト0円】:効率的な学習法
- エンジニア転職の筆記試験対策【SPI・プログラミングテスト問題集】:総合的な試験対策
コーディングテストは、正しい対策をすれば必ず突破できます。あなたもエンジニアとしてのキャリアを掴み取りましょう!
あなたに最適な転職エージェントを見つけよう
転職活動を成功させるには、自分に合ったエージェント選びが重要です。
エンジニア転職ドットコムでは、未経験エンジニア向けに厳選した転職エージェントを徹底比較しています。年代別・職種別・地域別におすすめのサービスを紹介しているので、ぜひチェックしてみてください。
この記事を書いた人
はなまうよぞら
未経験からエンジニア転職を目指した際、最初はLeetCode Easy問題すら解けず挫折しかけた経験を持つ。しかし、3ヶ月間の集中対策でLeetCode 200問以上を解き、外資系IT企業のコーディングテストに合格。現在はシニアエンジニアとして活躍中。「未経験者でもコーディングテストは突破できる」という信念のもと、エンジニア転職ドットコムを運営。
最終更新日:2025年11月15日


コメント