1. test 1
  2. test 2
  3. test 3
  4. test 4
  5. test 5
コース一覧
アルゴリズム道場 カメ師範の十の巻
第一の巻 総和と最大

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

言語を問わず、考え方だけを問う演習専用コースです。解説はありません。巻物と完成条件だけを読み、白紙から自分で組み立てます。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分

道場の正面に、カメ師範が自ら立っています。これまで師範は奥に控えているばかりでしたが、今日は違いました。「ここから先は、道具を選ばん。Python、JavaScript、TypeScript、Java——得物は自由。問うのは考え方のみじゃ。商店街の数字を使い、算法の腕を見せてもらおう」

師範が巻物を一つ、するりと開きます。「商店街の一日の売上高、ここに12店舗ぶんある。総和と最大、ライブラリの力を借りずに求めよ」

合計を出す関数も、最大値を出す関数も、どの言語にも用意されています。ここではそれを使いません。便利な道具の中で何が起きているのかを、自分の手で一度なぞるのが第一の巻の狙いです。

完成条件

売上高の配列を受け取り、合計と最大値を1つの文字列にして返す関数 sumAndMax を作ってください。どの言語で解く場合も、関数名は sumAndMax にしてください。

返す文字列の形は次のとおりです。

プレーンテキスト

合計 20600 / 最大 3200
  • 「合計」「/」「最大」の前後の半角スペースまで一致させること
  • 数値の前後に余分な記号を付けないこと
  • 配列には必ず1つ以上の要素が入っています

禁じ手

次の道具は使えません。ループと、足し算と、大小の比較だけで書いてください。

  • Python の sum max
  • JavaScript / TypeScript の reduce Math.max(...arr)
  • Java の Arrays.stream(...).sum() IntStream.max()

進め方

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

合計と最大は、別々に2周する必要はありません。1周のあいだに両方を育てられます。最大値の初期値を何にするかだけは、先に決めてから書き始めてください。ここを 0 にしてしまうと、売上が全部マイナスの日に嘘をつく関数になります。

要件

  1. 関数名は sumAndMax。どの言語で解く場合も同じ名前にすること
  2. 合計と最大は、ループと足し算と比較だけで求めること
  3. sum / max / reduce / Math.max / stream などの合計・最大の道具を使わないこと
  4. 「合計 20600 / 最大 3200」の形の文字列を1つ返すこと。印字ではなく return で返す

入出力例

sumAndMax([1200,3200,800,1500,2400,900,1100,2600,700,1900,1300,3000]) → "合計 20600 / 最大 3200" sumAndMax([500]) → "合計 500 / 最大 500" sumAndMax([300,300,300]) → "合計 900 / 最大 300" sumAndMax([10,900,20,880]) → "合計 1810 / 最大 900" sumAndMax([4500,4500,120,60,4400]) → "合計 13580 / 最大 4500"

ヒント

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

①方針 合計を入れる箱と、最大を入れる箱を1つずつ用意します。配列を1周するあいだに、合計には足し込み、最大には「今より大きければ入れ替える」を繰り返します。1周で両方そろいます

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

関連レッスン

  • 第二の巻 線形探索

    先頭から順に探し、見つけた位置と比べた回数を報告します。

  • 第三の巻 バブルソート

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

  • 第四の巻 二分探索

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

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

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

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

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

  • JavaScriptWeb で動的な振る舞いを担う言語
  • TypeScript静的型を加えた JavaScript の上位互換
  • 関数処理に名前を付けて再利用できる単位
  • 配列サイズ固定の同型データの集まり
  • ループ繰り返し処理。矢印で戻すか専用記号で示す
main.py
学習モード
エディタを読み込んでいます

メモ

第一の巻 総和と最大

⌘S で保存