基本情報技術者試験の科目Bで時間が足りない人へ|擬似言語問題を速く読むコツ
基本情報技術者試験の科目Bで、問題を読んでいるうちに時間がなくなる。そんな悩みはかなり多いです。
特に擬似言語の問題は、最初から最後まで丁寧に読もうとすると、すぐに5分、10分と過ぎてしまいます。焦って選択肢を見ると、どれもそれっぽく見えるのもつらいところです。
ただ、時間が足りない原因は、単に読むのが遅いからではありません。多くの場合、読む場所の優先順位が決まっていないことが原因です。
この記事では、IT初心者でも実践しやすいように、科目Bの擬似言語問題を速く読むコツを解説します。文法そのものの説明ではなく、本番で時間を節約するための読み方に絞って進めます。
科目Bで時間が足りなくなるのは自然なこと¶
IPAの公式ページによると、基本情報技術者試験の科目Bは試験時間100分、出題数20問の多肢選択式です。単純に割ると、1問あたり5分です。
5分と聞くと、意外と余裕がありそうに感じるかもしれません。けれども、擬似言語問題では問題文、処理の説明、プログラム、選択肢をすべて確認する必要があります。
つまり、5分の中に読解、トレース、判断、見直しを入れなければなりません。初心者にとっては、かなり忙しい試験です。
さらに科目Bは、アルゴリズムとプログラミングの問題が中心です。問題によっては、変数の値を追いかけたり、配列の中身を確認したりする必要があります。
ここで大切なのは、全部を完璧に読もうとしないことです。合格を目指すなら、まずは解ける問題を確実に取り、時間を使いすぎる問題から早めに離れる判断も必要になります。
【関連記事】基本情報技術者試験の科目B難易度と合格率を徹底解説|100分の試験を攻略するために
時間が足りない人によくある読み方¶
では、どんな読み方をすると時間が足りなくなるのでしょうか?これは私が初心者の方に説明するとき、かなりよく見るパターンです。
以下の表に、ありがちな読み方と改善の方向をまとめました。
| 時間が足りない読み方 | 起きやすいこと | 改善の方向 |
|---|---|---|
| 問題文を最初から全部暗記しようとする | 重要でない説明に時間を使う | 目的、入力、出力を先に見る |
| すべての変数を同じ重さで追う | メモが増えて混乱する | 答えに関係する変数を絞る |
| ループの中を毎回丁寧に読む | 処理回数が多い問題で詰まる | 変化する値だけを追う |
| 選択肢を最後まで見ない | 何を求める問題か見失う | 早い段階で選択肢の型を見る |
| わからない問題に粘りすぎる | 後半の解ける問題を落とす | いったん印を付けて次へ進む |
この表を見ると、時間不足は知識不足だけではないことがわかります。読み方の型がないまま問題に入ると、毎回ゼロから考えることになります。
本番では、ゼロから悩む時間が一番もったいないです。先に自分なりの読み方を決めておくだけで、かなり楽になります。
擬似言語問題を速く読む基本方針¶
擬似言語問題を速く読むためには、読む順番を変えるのが効果的です。上から順番に読むのではなく、必要な情報から拾います。
初心者のうちは、コードを見るとすぐに細かい処理を追いたくなります。けれども、最初にやるべきことは細部の理解ではありません。
まず何をするプログラムかをつかむ¶
最初に見るべきなのは、このプログラムが何をしたいのかです。合計を求めるのか、最大値を探すのか、条件に合う件数を数えるのかで、読むポイントは変わります。
たとえば、件数を数える問題なら、注目するのはカウント用の変数です。最大値を求める問題なら、最大値候補が更新される条件を見ます。
このように、目的がわかると追うべき変数が減ります。全部の行を同じ熱量で読まないことが、速く読む第一歩です。
入力と出力を先に確認する¶
次に、入力と出力を確認します。入力は問題で与えられるデータ、出力は最終的に答える値です。
擬似言語問題では、途中の処理が難しく見えても、最終的に聞かれていることはシンプルな場合があります。最後に返す値、表示する値、空欄に入る式を先に見ると、問題のゴールがはっきりします。
ゴールがわからないままコードを読むのは、地図を見ずに駅の中を歩くようなものです。迷いやすいですよね。
変数を主役と脇役に分ける¶
擬似言語では、いくつかの変数が出てきます。ですが、すべてが答えに直結するわけではありません。
主役になるのは、戻り値、表示される値、空欄の前後で使われる値です。脇役になるのは、ループ用の添字や一時的な作業変数です。
もちろん脇役も必要です。けれども、同じ重さで追うとメモが増えすぎます。
私がエンジニアとしてコードを読むときも、最初から全変数を追うことはほとんどありません。まず主役の変数を見つけて、その値がどの条件で変わるかを追います。
擬似言語そのものに苦手意識がある方は、以下の記事もご覧ください。 【関連記事】擬似言語が全くわからない!? IT初心者でも読めるようになる考え方と勉強法
サンプルで見る速い読み方¶
ここからは、簡単なサンプルで読み方を確認しましょう。文法を覚えることが目的ではなく、どこを見ると速く読めるかをつかむための例です。
次のプログラムは、配列の中から基準点以上の点数を数える処理です。
関数 countPass(scores, border)
count ← 0
i を 1 から scores の要素数 まで 1 ずつ増やす
もし scores[i] >= border なら
count ← count + 1
終わり
終わり
count を返す
このコードを最初から丁寧に読もうとすると、ループや条件分岐に意識が向きます。もちろんそれも大切ですが、まず見るべき場所は別です。
このプログラムのゴールは、countを返すことです。つまり、速く読むならcountがいつ増えるかに注目します。
条件はscores[i] >= borderです。ここまでわかれば、各点数が基準点以上かどうかを確認するだけになります。
たとえば、scores = [72, 55, 80, 49, 60]、border = 60だとします。このとき、全行を追わなくても次のように整理できます。
| i | scores[i] | border以上か | count |
|---|---|---|---|
| 1 | 72 | はい | 1 |
| 2 | 55 | いいえ | 1 |
| 3 | 80 | はい | 2 |
| 4 | 49 | いいえ | 2 |
| 5 | 60 | はい | 3 |
答えは3です。ここで大事なのは、iそのものよりも、countが増えるタイミングを見ていることです。
初心者のうちは、iの値、配列の位置、条件、countの値をすべて同じ強さで追おうとして疲れます。慣れてきたら、答えに関係する値だけを太く追うイメージを持つとよいです。
ループは全部読むより変化を見る¶
科目Bで時間を奪う大きな原因がループです。ループが出てきた瞬間に苦手意識が出る人も多いと思います。
でも、ループは怖いものではありません。見るべきなのは、同じ処理が何回も書かれていることではなく、1回ごとに何が変わるかです。
ループで見るポイントは3つ¶
ループを読むときは、まず変化する値を探します。多くの場合、添字、合計、カウント、最大値、フラグのどれかです。
次に、更新される条件を確認します。毎回更新されるのか、条件を満たしたときだけ更新されるのかで、トレース量が変わります。
最後に、ループ終了後に使われる値を見ます。終了後に使われない値を細かく追っても、答えにはつながりにくいです。
この3つだけでも、読む量はかなり減ります。問題の全体を理解する前に、まず値の変化に目を向けてみてください。
二重ループは内側から見ない¶
二重ループが出ると、急に難しく感じます。外側のループと内側のループがあり、処理回数も増えるからです。
ここでやりがちな失敗は、いきなり内側の処理を細かく追うことです。まずは外側のループが何を1単位としているかを見ます。
たとえば、外側が人、内側が科目なら、1人分の点数を集計しているのかもしれません。外側が行、内側が列なら、表や二次元配列を見ている可能性があります。
二重ループは、処理のまとまりを言葉に置き換えると読みやすくなります。コードをそのまま追うより、1周で何をしているかを短くメモするのがおすすめです。
選択肢は早めに見る¶
意外と効果が大きいのが、選択肢を早めに見ることです。もちろん、選択肢だけで答えを決めるのは危険です。
ただし、選択肢を見ると、問題が何を問っているかがわかります。数値を求めるのか、条件式を選ぶのか、処理の説明を選ぶのかで読み方が変わります。
空欄補充問題なら、空欄の前後を先に確認します。選択肢が条件式なら、比較している変数と演算子に注目します。
出力結果を問う問題なら、最終的に表示される値を追えばよいです。途中のすべての値を完璧に覚える必要はありません。
空欄補充が苦手な方は、以下の記事もご覧ください。 【関連記事】基本情報技術者試験の科目Bの空欄補充問題の解き方を解説|擬似言語で見る判断ポイント
本番での時間配分の考え方¶
科目Bは1問5分が目安ですが、すべての問題に5分ずつ使う必要はありません。むしろ、均等に使おうとすると難問で崩れます。
おすすめは、最初の1周で解ける問題を拾うことです。読んで方針が立つ問題は進め、方針が立たない問題は印を付けて後回しにします。
目安としては、2分読んでも何を追えばよいかわからない問題は危険です。そのまま粘ると、他の問題の時間を奪います。
もちろん、あと少しで解けそうな問題なら続けてもよいです。大切なのは、粘るか飛ばすかを感覚だけで決めないことです。
次のように、時間の役割を分けて考えると落ち着きます。
| 時間帯 | やること | 意識すること |
|---|---|---|
| 最初の30分 | 解きやすい問題を拾う | 完璧主義にならない |
| 次の50分 | 標準的な問題を丁寧に解く | 主役の変数を追う |
| 最後の20分 | 印を付けた問題と見直し | 空欄、条件、出力を確認 |
この配分はあくまで目安です。自分の得意不得意に合わせて調整してください。
情報セキュリティ問題が得意なら、そこで時間を短縮できる可能性があります。逆にアルゴリズム問題が得意なら、前半で得点を固めやすくなります。
速読のコツ¶
私はエンジニアとして10年以上、仕事で多くのコードを読んできました。その経験から言えるのは、コードを速く読む人ほど、最初から全部を読んでいないということです。
実務でも、いきなり細部には入りません。まず、この処理は何のためにあるのか、どのデータが入って、どの値が出ていくのかを見ます。
その後で、値が変わる場所を確認します。バグ調査でも、新しい機能の理解でも、この順番はほとんど変わりません。
科目Bの擬似言語も同じです。試験問題だから特別な読み方が必要に見えますが、基本は実務のコードリーディングに近いです。
初心者の方ほど、1行ずつ正確に訳そうとします。真面目な人ほど、この読み方をしがちです。
でも、本番で必要なのは翻訳ではなく判断です。この行は答えに関係するのか、この条件で値が変わるのかを見極める力が大切です。
練習では時間を測るより読み方を固定する¶
時間が足りないと感じると、すぐにタイマーを使って速く解く練習をしたくなります。もちろん時間を測る練習は必要です。
ただ、読み方が決まっていない状態で時間だけ測っても、焦る練習になりやすいです。まずはゆっくりでよいので、読む順番を固定しましょう。
おすすめの順番は、問題の目的、入力と出力、主役の変数、変数が変わる条件、選択肢の順です。この型で何問か解くと、問題を見たときの迷いが減ります。
慣れてきたら、1問ごとに使った時間を記録します。正解か不正解だけでなく、どこで時間を使ったかを書いておくと改善しやすいです。
たとえば、問題文の理解に時間がかかったのか、配列の添字で迷ったのか、選択肢の比較で迷ったのかを分けます。原因が違えば、対策も変わります。
よくある失点を減らす見直しポイント¶
最後に、時間がない中でも見直したいポイントを整理します。全部を見直すのは難しいので、失点しやすい場所に絞ります。
まず確認したいのは、条件の境界です。以上なのかより大きいなのか、未満なのか以下なのかで答えが変わります。
次に、ループの開始と終了です。配列の最初を含むのか、最後まで処理するのかは、典型的なミスになりやすいです。
最後に、最終的に返す値です。途中で正しい値を出していても、返す変数を取り違えると失点します。
この3つは短時間でも確認しやすいです。余裕がないときほど、見直しの範囲を絞ってください。
まとめ:速く読むとは、雑に読むことではない¶
科目Bの擬似言語問題を速く読むとは、雑に読むことではありません。答えに関係する場所を優先して読むということです。
問題の目的をつかみ、入力と出力を確認し、主役の変数を追う。これだけでも、読み方はかなり変わります。
時間が足りない人は、まず読む順番を決めてください。毎回なんとなく読み始める状態から抜け出すだけで、焦りは減ります。
最初はゆっくりで大丈夫です。型が身につくと、自然に読むスピードは上がっていきます。
基本情報技術者試験の科目Bは、初心者にとって簡単な試験ではありません。ですが、正しい読み方を練習すれば、擬似言語は少しずつ読めるようになります。
本番で必要なのは、すべてを完璧に理解することではありません。限られた時間の中で、取れる問題を確実に取りにいくことです。
ここまでお読みいただきありがとうございました。