基本情報技術者試験 科目Bの「令和4年度 サンプル問題 問11」(配列・binSort)を、図解トレースで解説します。選択肢が4つある「どの引数で呼び出すと?」型の問題。4つ全部をトレースしようとしてはいけません。1つ目のトレースで 処理の法則を見抜いて 正解を導くのがコツです。
動画で見たい方はこちら▼
問題(令和4年度 サンプル問題 問11)
次の記述中の【 】に入れる正しい答えを、解答群の中から選べ。ここで、配列の要素番号は 1 から始まる。
関数 binSort を binSort(【 】) として呼び出すと、戻り値の配列には未定義の要素は含まれておらず、値は 昇順 に並んでいる。
○ 整数型の配列: binSort(整数型の配列: data)
整数型: n ← data の要素数
整数型の配列: bins ← { n 個の未定義の値 }
整数型: i
for (i を 1 から n まで 1 ずつ増やす)
bins[data[i]] ← data[i]
endfor
return bins
解答群
ア {2, 6, 3, 1, 4, 5} イ {3, 1, 4, 4, 5, 2} ウ {4, 2, 1, 5, 6, 2} エ {5, 3, 4, 3, 2, 6}
本番さながらの環境で解いてみたい方はこちら↓
解説
正解は ア {2, 6, 3, 1, 4, 5} です。
①アを入れてトレース
引数がどういった配列なら正解になるのか、を意識しながら、試しに最初のアでトレースします。n は data の要素数で 6、bins は「n 個(6個)の未定義の値」です。
| i | bins[data[i]] ← data[i] |
|---|---|
| 開始 | - |
| 1 | bins[data[1]]←data[1] bins[2]←2 |
| 2 | bins[data[2]]←data[2] bins[6]←6 |
data(ミ=未定義)
| 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|
| ミ | ミ | ミ | ミ | ||
| 2 | 6 |
ここまでで、値=要素番号の状態で(2 が要素番号2に、6 が要素番号6に)代入されることがわかります。よって、配列の要素の値に 1〜6 のすべての数字が揃っているア が正解です。
Memo: 以降もトレースした場合
最後まで追うと、次のようになります。
| i | bins[data[i]] ← data[i] |
|---|---|
| 3 | bins[data[3]]←data[3] bins[3]←3 |
| 4 | bins[data[4]]←data[4] bins[1]←1 |
| 5 | bins[data[5]]←data[5] bins[4]←4 |
| 6 | bins[data[6]]←data[6] bins[5]←5 |
data
| 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|
| 2 | 6 | 3 | 1 | 4 | 5 |
Point: 考えながらトレースする
今回、最初の選択肢であるアがそのまま正解のため、アを何も考えずに最後までトレースすれば、5分以内に解けます。ただ、それは偶然であって、仮にエに正解の選択肢があった場合、すべての選択肢をトレースするまで正解がわかりません。「(正解かどうかに関係なく)アだけをトレースして、どれが正解なのかを見抜く」つもりでトレースしましょう。(解きやすくするために、出題者が意図的に最初のアに正解を置いている可能性もありますが…今回の難易度であれば、どこに正解があってもおかしくありません)
Memo: プログラムから解く方法
bins[data[i]] ← data[i] がどういう処理なのかを調べることでも、答えがわかります。data[i] 部分を書き換えると bins[★] ← ★ になります。つまり bins[1]←1、bins[2]←2… と、値=要素番号の状態で代入されます。bins は6個の未定義の値なので、1〜6 の数字が揃っている(重複していない)アが正解です。
Memo: 解答群をヒントにする方法
解答群をよく見ると、アだけが 1〜6 の数字が重複なく揃っています。よって「ア」が正解なのでは、と仮定してトレースすると、よりスムーズに解けます。(この場合は、怪しいと思った選択肢を先にトレースすると良いです。今回はアなので、どちらにしてもですが)
まとめ
「どの引数で呼び出すと?」型は、全選択肢をトレースすると時間が足りません。1つ目で bins[data[i]] ← data[i]=値を要素番号の位置へ代入 という処理の意味を見抜ければ、「1〜6 が重複なく揃うアが正解」と一気に絞れます。考えながらトレースする習慣をつけましょう。
関連リンク

関連動画
配列&繰り返しの基礎が学べる、同じ章の動画です。
講座の全動画はこちら(プレイリスト)。

