【科目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つのルール

  1. 配列は横一列
  2. 確定部分に必ず印
  3. 内側ループは結果だけ
  4. 2回目以降は雑でいい

まとめ

科目Bのアルゴリズム問題は、

理解力よりも「作業の設計力」 が問われます。

ペーパーは、

正解を書くための場所ではなく

迷わないための道しるべ

この意識を持つだけで、

ソート・探索問題の正答率は確実に上がります。

訪問数 5 回, 今日の訪問数 5回