本文へスキップ

FE SUBJECT B

科目Bはコードを読む筋トレ。眺めるだけでは伸びない

科目Bは100分で20問。中心はアルゴリズムとプログラム読解で、残りに情報セキュリティが入ります。大事なのは、コードの雰囲気を読むことではなく、変数・配列・条件分岐・ループを順番に追うことです。

ひらめく白猫
黒猫

黒猫:「コード長いから無理」はまだ早い。長いコードも、値が変わる行だけ追えばただの作業だ。逃げるな、表を書け。

最初に覚えるべき読み方

科目Bでは、知らないアルゴリズムに見えても、問題文の仕様と疑似言語の動きを合わせれば解ける問題が多くあります。最初に見るのは、入力、出力、配列の開始位置、ループの範囲、条件式です。特に配列が1始まりか0始まりか、for文がどこまで回るかを見落とすと、途中まで合っていても選択肢で外れます。

おすすめは、問題を読んだらすぐ答えを選ばず、小さい入力で手を動かすことです。配列が6個あるなら、まず3個で同じ処理をしてみます。変数が更新されたら表に書き、配列が変わったらその時点の状態を残します。この作業をすると、空欄補充や出力結果の問題で迷いにくくなります。

白猫

白猫:1行ずつなら大丈夫。変数が変わった場所だけ印を付けていけば、長いコードも少しずつほどけるよ。

トレース表を作る

トレース表は、科目Bの武器です。列にはループ回数、添字、主要な変数、配列の一部を書きます。すべての変数を書く必要はありません。問題で問われている値に影響するものだけ追えば十分です。たとえば二分探索なら、left、right、mid、比較対象。スタックならpushとpopの後の中身。キューなら先頭と末尾。DPなら更新されたセルだけ見ます。

Sikaku Masterの科目Bでは、疑似コードトレースを確認できる問題があります。自分で書いた表と、システム上のトレースがどこでズレたかを見ると、読み飛ばしの癖が見つかります。答えを覚えるより、ズレた瞬間を見つける方が次に効きます。

配列の最大値を求める処理のトレース表の例 例:配列 a = [3, 1, 4, 1, 5] から最大値 max を求める 追うのは「i(添字)」と「max」だけ。値が変わった行に印を付ける。 i(添字) a[i] max 変化したか 初期 3 max ← a[0] = 3 1 1 1 3 1 < 3 なので変化なし 2 2 4 4 4 > 3 → max 更新 3 3 1 4 1 < 4 なので変化なし 4 4 5 5 5 > 4 → max 更新(答え)
トレース表のイメージ。全部の変数を書く必要はなく、答えに関わる imax だけを追います。色が付いた行が「値が変わった瞬間」です。
配列

添字の開始位置と更新前後の値を見る。最後の1回を勝手に省略しない。

探索・整列

比較した値、交換した値、終了条件を追う。途中状態を残すと選択肢を切りやすい。

再帰

呼び出しが増える順番と、戻り値が返る順番を分けて考える。

セキュリティ

攻撃名を覚えるだけでなく、原因・影響・対策の組み合わせで読む。

空欄補充は前後から決める

空欄補充問題は、空欄だけを見ても決まりません。直前の条件、直後の処理、関数の目的を合わせて見ます。たとえば、配列を昇順に保つ処理なら、比較条件が逆になっていないかを確認します。最大値を求める処理なら、初期値と更新条件が対応しているかを確認します。

セキュリティ問題は、アルゴリズムとは違って文章読解に近いですが、ここでも雰囲気で選ぶと危険です。SQLインジェクションなら入力値の扱い、CSRFなら正規利用者のブラウザを悪用する流れ、認可不備ならログイン済みでも権限確認が足りない点を見ます。用語を知っているだけでなく、事例のどこが原因かを言える状態にします。

黒猫

黒猫:科目Bで一番危ないのは、分かった気になること。手を動かしてない理解は、だいたい紙より薄い。

解けなかった問題の直し方

科目Bの復習では、正答を見るだけで終わらせないことが大切です。間違えたら、まず「どの行で読み違えたか」を探します。条件式を逆に読んだのか、ループの最後を1回多く回したのか、配列の添字をずらしたのか。原因を名前にすると、次に同じミスを見つけやすくなります。

復習リストには、単に不正解だった問題だけでなく、正解したけれど自信がなかった問題も残しておくと効果的です。科目Bは偶然正解があり得るので、「なぜその選択肢になるのか」を説明できるまで確認します。

次にやること

読み終わったら、すぐにトレースの練習を1問だけしてみてください。手を動かさないと、この記事の内容は実感できません。

根拠:試験要綱Ver.5.5、FEシラバスVer.9.2。科目Bはアルゴリズムとプログラミング、情報セキュリティを中心に練習します。