STEP1:全体の「入口」と「出口」を把握する
いきなり中身の複雑な分岐(ひし形)や処理(四角)を追い始めるのはNGです。まずは「何を入れたら、何が出てくる処理なのか?」という大枠を捉えます。
先ほどの問15の例で言うと、
- 入口(初期状態):
x = [4, 3, 5, 2, 1]というバラバラの数字の配列。 - 出口(終了): 並び替えられた新しい
xを出力する。
ゴールが分かっているだけで、途中の処理が「あ、これは数字を並び替えるための準備をしているんだな」と予測しながら読めるようになります。
STEP2:登場人物(変数)の「役割」を見抜く
フローチャートの中には、i や N、t などのアルファベット(変数)が登場します。これらをただの記号として扱うのではなく、「現実世界の役割」に当てはめてラベリングしてあげます。
N = 4➔ 「限界値(リミット)」。ループを止めるためのストッパー。i = 0➔ 「指差し確認用のカウンター」。今、配列の何番目を見ているかを示す指。t➔ 「一時置き場」。荷物(データ)を持ち替えるための仮置き用の机。
このように役割が見えると、「i ← i + 1」という処理が「ただの足し算」ではなく、「指差し確認を一つ右へズラしたんだな」と直感的に理解できるようになります。
STEP3:絶対に脳内で処理せず「手」で動かす(トレース)
アルゴリズムを読む上で一番やってはいけないのが、「頭の中だけで数値を計算すること」です。人間の脳は、3つ以上の変数が同時に変化すると簡単にパンクします。
必ず紙の余白に表(トレース表)を書き出し、コンピューターになりきって1行ずつ処理を書き残していきます。
| i の値 | 比較する要素 x[i] と x[i+1] |
条件判定 x[i] > x[i+1] |
入れ替え処理 | 処理後の配列 x の状態 |
|---|---|---|---|---|
| 初期 | – | – | – | [4, 3, 5, 2, 1] |
| 0 | x[0](=4) と x[1](=3) | 4 > 3 (Yes) | する | [3, 4, 5, 2, 1] |
| 1 | x[1](=4) と x[2](=5) | 4 > 5 (No) | しない | [3, 4, 5, 2, 1] |
| 2 | x[2](=5) と x[3](=2) | 5 > 2 (Yes) | する | [3, 4, 2, 5, 1] |
| 3 | x[3](=5) と x[4](=1) | 5 > 1 (Yes) | する | [3, 4, 2, 1, 5] |
| 4 | ループ終了 | – | – | [3, 4, 2, 1, 5] |
地道に見えますが、これが「机上デバッグ(トレース)」と呼ばれる、プロもやっている最も確実な手法です。
現場のフローやJavaScriptの開発と同じ!
アルゴリズムの読み解きは、現場の業務フロー(例えば、トリアージの判断基準や、特定の条件下でスタッフがどう動くかの動線ルール)をチャート化して確認する作業と本質的には同じです。「条件Aを満たせばこの処理、満たさなければこの処理」というルールを一つずつ追うだけです。
また、現在学習しているJavaScriptでも、コードが思い通りに動かない時に console.log() を使って中身のデータがどう変化しているかを確認しますよね。あれはまさに、STEP3の「トレース」をコンピューターにやらせている状態です。
「アルゴリズムを読む力」は、試験に受かるためだけでなく、エラーの原因を突き止める開発者としての基礎体力に直結していると感じました!

コメント