前回、配列の多次元操作(行列計算など)を整理しました。ここまで、科目Bのさまざまな単元(条件分岐、繰り返し、関数、再帰、探索、ソート、スタックとキュー、連結リスト、二分木、ハッシュ表、多次元配列)を進めてきたので、今回は一度立ち止まって、これらに共通する「トレース問題の解き方」を整理しておきます。
目次
トレース問題とは何を問われているのか
これまでの各単元の記事で繰り返し触れてきたとおり、科目Bのトレース問題は、「疑似言語で書かれた処理を、実際に1行ずつ実行した場合、変数や配列の値がどう変化していくか」を問う問題です。
知識を暗記していれば答えられる科目Aとは違い、その場で処理を正確に追う力が求められる、という点が最大の特徴です。
これまでの単元に共通していたこと
各単元を振り返ると、自分がつまずいた原因には、共通するパターンがありました。
- 頭の中だけで処理を完結させようとして、途中で値を見失う
- 添字が0から始まるか1から始まるかなど、問題文の前提を確認せずに思い込みで進める
- 繰り返しや再帰が重なると、今どの階層にいるかが分からなくなる
これらは、単元ごとの知識不足というより、「追い方」そのものの問題だったと感じています。
手を動かして追う、基本のやり方
自分が実践している基本のやり方は、次の手順です。
- 登場する変数・配列を、あらかじめすべて書き出しておく
- 1行実行するごとに、変化した値だけを書き換えていく
- 条件分岐や繰り返しに入ったら、「今どの条件・何回目か」を必ずメモする
- 関数や再帰の呼び出しがあれば、呼び出し元の状態をいったん脇に置き、呼び出し先の処理が終わってから戻る
面倒に感じても、暗算で済ませようとするより、結果的にミスが減り、時間の見積もりも立てやすくなりました。
単元ごとの「追い方」を振り返る
これまで整理してきた単元も、この基本のやり方の応用でした。
- 配列:添字の位置を書き出す
- スタック・キュー:出入りの順番を書き出す
- 連結リスト・二分木:矢印でつながりを描く
- 再帰:積み木のように、深くなる部分と戻る部分を分けて考える
- 多次元配列:マス目を描いて、外側・内側の繰り返しを分けて追う
形は単元ごとに違っても、「頭の中で完結させず、書き出しながら追う」という土台は共通していると、あらためて感じています。
学習してみた感想
科目Bを一通り学んできて、結局のところ、才能やひらめきよりも、この「書き出しながら追う」という地道な作業の積み重ねが、正確さとスピードの両方につながるのだと実感しています。
次回は、過去問で頻出のアルゴリズムパターンをまとめます。
