1. test 1
  2. test 2
  3. test 3
  4. test 4
  5. test 5
  6. test 6
  7. test 7
コース一覧
アルゴリズム道場 カメ師範の十の巻
第二の巻 線形探索

アルゴリズム道場 カメ師範の十の巻

言語を問わず、考え方だけを問う演習専用コースです。解説はありません。巻物と完成条件だけを読み、白紙から自分で組み立てます。Python・JavaScript・TypeScript・Java のどれで解いても構いません。手が止まったときのために、方針・使う構文・部分解の3段階のヒントを各問に用意しています。総和と最大から始まり、線形探索、整列、二分探索、再帰、スタックとキューを経て、最後は初見の疑似コードを読み解いて実装するところまで、10問でアルゴリズムの基礎を一巡します。1問15分から45分、全10問で約5時間です。いずれかの言語の入門を終えて「動くものは書けるが、考え方に自信がない」と感じている方に向いています。

1
初段
01. 第一の巻 総和と最大15分
02. 第二の巻 線形探索15分
03. 第三の巻 バブルソート20分
04. 第四の巻 二分探索25分
2
中段
01. 第五の巻 整列の途中経過25分
02. 第六の巻 再帰25分
03. 第七の巻 スタックを作れ30分
04. 第八の巻 キューを作れ30分
3
師範
01. 第九の巻 計算量を体感せよ35分
02. 免許皆伝 初見の巻物45分

第二の巻 線形探索

初段 / 目安 15分

師範が二つめの巻物を開きます。「会員番号の帳簿から、目当ての番号を探せ。見つけた位置と、何回比べたかも報告せよ」

「何回比べたか」まで求められるのが、この巻物の妙なところです。答えが合っていればよいのではなく、そこにたどり着くまでに何手かかったかを自分で数えさせる。師範がわざわざそう書いたのには理由がありますが、それは第四の巻まで伏せておきます。

帳簿は先頭から順に並んでいます。あなたのやることは、人が指で追うのと同じです。1件見て、違ったら次を見る。それだけです。

完成条件

会員番号の配列と、探したい番号を受け取り、見つけた位置と比較回数を1つの文字列にして返す関数 linearSearch を作ってください。どの言語で解く場合も、関数名は linearSearch にしてください。

返す文字列の形は次のとおりです。位置は先頭を 0 とする番号です。

プレーンテキスト

位置 3 / 比較 4回
  • 最後まで見つからなかったときは、位置を -1 にします。比較回数は最後まで数えた回数です
  • 「位置」「/」「比較」「回」の前後の半角スペースまで一致させること
  • 配列には必ず1つ以上の要素が入っています

数え方の約束

比較回数は、帳簿の1件と目当ての番号を照らし合わせた回数です。1件目を見た時点で 1 回、2件目を見た時点で 2 回になります。見つけたらそこで打ち切り、それ以降は数えません。

進め方

白紙から書いてください。手が止まったらヒントを開けます。ヒントは3段階で、①方針、②使う構文、③部分解の順に出ます。1つも開けずに通せたら、その問題は自分のものです。

見つけたあとも配列の最後までループを回してしまうと、比較回数が合いません。見つけた瞬間に打ち切る書き方を、自分の言語で確かめてから始めてください。

要件

  1. 関数名は linearSearch。どの言語で解く場合も同じ名前にすること
  2. 先頭から順に1件ずつ照らし合わせること
  3. 照らし合わせた回数を数え、見つけたらそこで打ち切ること
  4. 見つからなかったときは位置を -1 にすること
  5. 「位置 3 / 比較 4回」の形の文字列を1つ返すこと。印字ではなく return で返す

入出力例

linearSearch([1041,1078,1102,1150,1203,1266,1310,1355], 1150) → "位置 3 / 比較 4回" linearSearch([1041,1078,1102,1150,1203,1266,1310,1355], 1041) → "位置 0 / 比較 1回" linearSearch([1041,1078,1102,1150,1203,1266,1310,1355], 1355) → "位置 7 / 比較 8回" linearSearch([1041,1078,1102,1150,1203,1266,1310,1355], 1200) → "位置 -1 / 比較 8回" linearSearch([2001,2002], 2002) → "位置 1 / 比較 2回" linearSearch([777], 777) → "位置 0 / 比較 1回" linearSearch([777], 778) → "位置 -1 / 比較 1回"

ヒント

前のヒントを開くと次が開きます。開かずに解けると未開封クリアです

①方針 先頭から末尾へ向かって1件ずつ見ていきます。見るたびにカウンタを1つ増やし、目当ての番号と同じなら、その位置とカウンタを文字列にして即座に返します。ループを最後まで抜けきったら、見つからなかったということです

ヒント 2ヒント 1 を開くと読めます
ヒント 3ヒント 2 を開くと読めます
生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/08/09

関連レッスン

  • 第三の巻 バブルソート

    隣同士を比べて入れ替える、古くから伝わる整列を自分で書きます。

  • 第四の巻 二分探索

    並んだ帳簿を半分ずつ潰します。第二の巻と比較回数を比べます。

  • 第五の巻 整列の途中経過

    選択ソートが3周を終えた時点の並びを答えます。1周で何が確定するかを追います。

  • 第九の巻 計算量を体感せよ

    同じ答えを出す2つのやり方で、比べた回数がどれだけ違うかを数えます。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • 配列サイズ固定の同型データの集まり
  • 関数処理に名前を付けて再利用できる単位
  • ループ繰り返し処理。矢印で戻すか専用記号で示す
main.py
学習モード
エディタを読み込んでいます

メモ

第二の巻 線形探索

⌘S で保存