黒猫:「コード長いから無理」はまだ早い。長いコードも、値が変わる行だけ追えばただの作業だ。逃げるな、表を書け。
最初に覚えるべき読み方
科目Bでは、知らないアルゴリズムに見えても、問題文の仕様と疑似言語の動きを突き合わせれば解ける問題が多い。最初に見るのは、入力、出力、配列の開始位置、ループの範囲、条件式。特に「配列が1始まりか0始まりか」「for文がどこまで回るか」を見落とすと、途中まで合っていたのに選択肢で外れる。私はこれで何問落としたか数えたくない。
おすすめは、問題を読んだらすぐ答えを選ばず、小さい入力で手を動かすことだ。配列が6個あるなら、まず3個で同じ処理をしてみる。変数が更新されたら表に書き、配列が変わったらその時点の状態を残す。この一手間で、空欄補充や出力結果の問題が別物のように解きやすくなる。
白猫:1行ずつなら大丈夫。変数が変わった場所だけ印を付けていけば、長いコードも少しずつほどけるよ。
トレース表を作る
トレース表は、科目Bの最強装備だ。列にはループ回数、添字、主要な変数、配列の一部を書く。すべての変数を書く必要はない。問われている値に影響するものだけ追えば十分だ。二分探索なら left・right・mid と比較対象。スタックなら push / pop の後の中身。キューなら先頭と末尾。DPなら更新されたセルだけでいい。
当サイトの科目Bには、疑似コードのトレースを確認できる問題がある。自分で書いた表と、画面上のトレースが「どこでズレたか」を見つけると、自分の読み飛ばしの癖が分かる。答えを覚えるより、ズレた瞬間を見つけるほうが次に効く。
添字の開始位置と更新前後の値を見る。最後の1回を勝手に省略しない。
比較した値、交換した値、終了条件を追う。途中状態を残すと選択肢を切りやすい。
呼び出しが増える順番と、戻り値が返る順番を分けて考える。
攻撃名を覚えるだけでなく、原因・影響・対策の組み合わせで読む。
空欄補充は前後から決める
空欄補充は、空欄だけを睨んでも決まらない。直前の条件、直後の処理、関数の目的をセットで見る。配列を昇順に保つ処理なら、比較条件が逆になっていないか。最大値を求める処理なら、初期値と更新条件が対応しているか。空欄の“外側”に答えのヒントが落ちている。
セキュリティ問題は文章読解に近いが、ここでも雰囲気で選ぶと危ない。SQLインジェクションなら入力値の扱い、CSRFなら正規利用者のブラウザを悪用する流れ、認可不備ならログイン済みでも権限確認が足りない点。用語を知っているだけでなく、「事例のどこが原因か」を自分の言葉で言える状態にしておきたい。なお、ビット操作や2のべき乗の感覚が怪しい人は、先に2進数の1問1問で足場を作っておくと、トレースが楽になる。
黒猫:科目Bで一番危ないのは、分かった気になること。手を動かしてない理解は、だいたい紙より薄い。
解けなかった問題の直し方
科目Bの復習で、正答を見るだけで終わらせるのはもったいない。間違えたら、まず「どの行で読み違えたか」を探す。条件式を逆に読んだのか、ループの最後を1回多く回したのか、配列の添字をずらしたのか。原因に名前をつけると、次に同じミスを自分で見つけられるようになる。
復習リストには、不正解だった問題だけでなく、正解したけれど自信がなかった問題も残しておくといい。科目Bは偶然の正解があり得る。「なぜその選択肢になるのか」を説明できるまでが復習だ。
読んだら演習で確認する
読み終わったら、すぐにトレースの練習を1問だけやってみてほしい。手を動かさないと、この記事の内容は実感できない。変数表を書きながら解く——それだけで、科目Bの景色は変わる。
よくある質問
コードを速く読むコツはありますか?
速く読むより、変数・配列・条件分岐・ループを1行ずつ順番に追うのが、結局いちばん速い。雰囲気で読むと、条件式の向きやループ回数で取りこぼす。
トレース表は毎回書くべきですか?
慣れるまでは毎回書くのがおすすめ。変数の値の変化を表にすると、どの行で読み違えたかが後から特定できる。
正解した問題も復習すべきですか?
科目Bは偶然の正解があり得る。自信がなかった問題は、なぜその選択肢になるか説明できるまで復習リストに残しておくと安定する。
参考にした公式情報
- IPA 基本情報技術者試験 試験要綱 Ver.5.5
- IPA 基本情報技術者試験 シラバス Ver.9.2
科目Bはアルゴリズムとプログラミング、情報セキュリティが中心です。出題形式は改定される場合があるため、受験前にIPAの公式情報をご確認ください。