【科目B対策】擬似コード問題で差がつく「試験中のペーパーの使い方」
基本情報技術者試験(科目B)のアルゴリズム問題では、
プログラムが読めないのではなく、
「途中で何をしているのか分からなくなる」
という理由で失点する受験生が非常に多いです。
その最大の原因が、
ペーパー(メモ用紙)の使い方が間違っていることです。
この記事では、実際に出題されるレベルの擬似コードを使って、
合格者がやっている“正しいペーパーの使い方” を解説します。
例題(選択ソート:最大値を後ろに送る)
次の擬似コードを考えます。
A ← [ 7, 3, 9, 4, 6 ]
N ← LENGTH(A)
for last ← N downto 2
MAX ← A[1]
MAX_POS ← 1
for i ← 2 to last
if A[i] > MAX then
MAX ← A[i]
MAX_POS ← i
endif
endfor
TEMP ← A[last]
A[last] ← A[MAX_POS]
A[MAX_POS] ← TEMP
endfor
for i ← 1 to N
print A[i]
endfor
この問題で問われるのは、
最終的に表示される配列の中身 です。
試験中のペーパーの役割を誤解していませんか?
まず、重要なことをはっきりさせます。
ペーパーの目的はこれです
正確に書くためではない
迷わないために使う
ペーパーは「ノート」ではありません。
思考の補助装置です。
ステップ1:配列を「横一列」で大きく書く
最初にやることは、これだけです。
A : [ 7 , 3 , 9 , 4 , 6 ]
1 2 3 4 5
- 必ず 横一列
- 添字(1,2,3…)は必ず書く
- ここは丁寧に
この時点で、問題の半分は解けています。
ステップ2:外側ループを日本語にする
for last ← N downto 2
これを、そのまま追おうとしてはいけません。
ペーパーにはこう書きます。
last = 5 → 4 → 3 → 2
右端から順に最大値を確定
for last ← N downto 2 は、
last に最初に N を入れて、
処理を1回行うごとに last を1ずつ減らし、
last が 2 になるまで繰り返す、という意味です。
「何をしているループか」 を言語化するのが重要です。
ステップ3:1回目だけ丁寧に追う(last = 5)
初期化を書く
MAX = 7
MAX_POS = 1
探索範囲:1 ~ 5
内側ループは「比較結果だけ」
全部の変数を書く必要はありません。
i=2 : 3 > 7 → ×
i=3 : 9 > 7 → ○(MAX=9, POS=3)
i=4 : 4 > 9 → ×
i=5 : 6 > 9 → ×
最大値は 9(位置3) と分かります。
ステップ4:入れ替えは「矢印」で表現
コードを書き写す必要はありません。
A[3] ↔ A[5]
配列を書き換えます。
[ 7 , 3 , 6 , 4 , 9 ]
そして、確定した場所に印を付けます。
[ 7 , 3 , 6 , 4 | 9 ]
この「印」が、後で自分を救います。
ステップ5:2回目以降は結果だけでOK
last = 4
探索:1~4
最大値 = 7(位置1)
A[1] ↔ A[4]
[ 4 , 3 , 6 , 7 | 9 ]
last = 3
探索:1~3
最大値 = 6(位置3)
[ 4 , 3 , 6 | 7 | 9 ]
last = 2
探索:1~2
最大値 = 4(位置1)
[ 3 , 4 | 6 | 7 | 9 ]
ステップ6:print文は「読むだけ」
最後の for 文は計算不要です。
3
4
6
7
9
試験でよくある失敗例
- コードを全部書こうとする
- 変数を毎回細かく書き直す
- 確定した要素が分からなくなる
- 途中結果を消してしまう
これらはすべて ペーパーの使い方の問題 です。
合格者が共通して守っている4つのルール
- 配列は横一列
- 確定部分に必ず印
- 内側ループは結果だけ
- 2回目以降は雑でいい
まとめ
科目Bのアルゴリズム問題は、
理解力よりも「作業の設計力」 が問われます。
ペーパーは、
正解を書くための場所ではなく
迷わないための道しるべ
この意識を持つだけで、
ソート・探索問題の正答率は確実に上がります。


ディスカッション
コメント一覧
まだ、コメントがありません