基本情報技術者試験の科目Bが難しすぎると感じる人へ|原因と対策を初心者向けに解説
「科目Aは進められるのに、科目Bになると急に手が止まる」「解説を読めば納得できるけれど、自分で初見の問題は解けない」。
そんな状態が続くと、科目Bは難しすぎると感じるかもしれません。
科目Bでは、単語の知識だけでなく、書かれた処理を順番に実行すると結果がどうなるかを考えます。初見のプログラムを読み解くのは、慣れないうちは負荷の高い作業です。
しかし、「難しい」の中身が違えば、必要な対策も違います。本記事ではどこから読めなくなっているのかを5種類に分け、苦手な部分を修復する方法を説明します。
基本情報の科目Bは何が難しい?¶
IPAの基本情報技術者試験では、科目Bは20問・100分の多肢選択式です。アルゴリズムとプログラミング、情報セキュリティなどについて、知識を使って問題を判断する力が求められます。
例えば、文章に「合計を求める」と書いてあれば意味はわかります。しかし、コード中にsum ← sum + data[i]とあったとき、iが変わるごとにどの数値が足されるかを追えるでしょうか。
一つひとつの記号が簡単でも、複数の処理が重なると難しくなるのです。そこで、難しい問題を繰り返す前に、失点した原因を見つけることが大切です。
まずは5つの苦手パターンを自己診断する¶
次の表で、最も近い状態を選んでください。複数当てはまっても構いません。
| 苦手タイプ | 典型的な症状 | 最初にやる練習 |
|---|---|---|
| ①記法で止まる | ←、mod、elseifの意味が曖昧 |
1〜3行の式を日本語にする |
| ②条件で止まる | =と←、<と≦を混同 |
境界値で真偽を確認する |
| ③繰返しで止まる | 2周目以降の変数を見失う | 1周ごとの表を書く |
| ④配列・関数で止まる | a[i]とi、引数と戻り値を混同 |
入出力と添字の対応を図示する |
| ⑤長文で止まる | 記法は読めるのに何を求めるか不明 | 仕様・設問・出力の対応を先に取る |
たとえば③に当てはまる場合、再帰処理の難問を何十題も解くより、短いループを確実に追う方が改善につながりやすいでしょう。
① 記法が読めない:日本語へ置き換える¶
以下を声に出すか、紙に書いて意味を確認します。
x ← 4
x ← x + 2
これは「xとx+2が等しい」という意味ではありません。2行目では右辺の4+2を計算したあと、xを6に更新します。
代入や演算子に不安がある人は、擬似言語の記号・記述形式一覧を確認し、Giji Academy「変数と代入」(無料)からやり直すとよいでしょう。
② 条件で止まる:境界値を3つ試す¶
例えば、score ≧ 60なら、59・60・61という値を入れます。
| score | score ≧ 60 |
|---|---|
| 59 | 偽 |
| 60 | 真 |
| 61 | 真 |
ここで60を偽だと判断したなら、>と≧の読み違えです。難解なアルゴリズムの前に、こうした基本の取り違えを直す方が先です。
③ 繰返しで止まる:更新直後の値を残す¶
ループ中の値は頭の中だけで覚えず、「i=1の直後」「i=2の直後」のように時点を揃えて表に書きます。ループの開始値・終了値・増分も忘れずに確認してください。
④ 配列・関数で止まる:添字と実際の値を分ける¶
配列data ← {2, 5, 4}で、先頭の添字が1から始まるなら、data[2]の値は5です。添字2そのものを計算に使ってはいけません。
関数では、「引数に渡す値」「戻り値として返る値」「関数内だけで更新される変数」を分けて見ます。関数内部の途中の値と戻り値は同じとは限りません。
⑤ 長文で止まる:問題文を3行に要約する¶
問題を読む前に次を埋めます。
- 何を受け取るか:例)得点が入った配列
- 何をしたいか:例)80点以上の件数を数える
- 何を返すか:例)該当する人数
この3点があやふやなら、コードの一行一行を追っても目的を見失いやすいです。
例題:複数の処理が重なるときの考え方¶
「記法はわかるけれど、条件分岐と繰返しが重なると解けない」人向けの例題です。ここでは配列の先頭の添字を1とします。
整数型の配列: data ← {2, 5, 4, 7}
整数型: i, total
total ← 0
for (i を 1 から 4 まで 1 ずつ増やす)
if (data[i] mod 2 = 0)
total ← total + data[i]
else
total ← total + 1
endif
endfor
問:最後のtotalはいくつか。
まず処理を日本語にすると、「配列の数が偶数ならその値を足し、奇数なら1だけ足す」です。次に表を作ります。
| i | data[i] | 偶数? | 足す値 | total(更新後) |
|---|---|---|---|---|
| 初期値 | ― | ― | ― | 0 |
| 1 | 2 | はい | 2 | 2 |
| 2 | 5 | いいえ | 1 | 3 |
| 3 | 4 | はい | 4 | 7 |
| 4 | 7 | いいえ | 1 | 8 |
答えは8です。data[i]そのものが毎回足されるわけではない点がポイントです。
少しだけ変えて、理解を確かめる¶
もし最後の要素を7から8に変更したらどうなるでしょうか。
data ← {2, 5, 4, 8}では、最後の要素が偶数になり、最後の加算が「+1」から「+8」に変わります。結果は15です。
このように、小さな変更で答えがどう変化するかを説明できれば、処理を丸暗記する段階から一歩進めています。
「解説を読めばわかる」のに初見で解けない理由¶
解説には、答えに至る道筋がすでに示されています。読んだときに理解できても、最初から自分でその道筋を見つけられるとは限りません。
改善には、次の練習が役立ちます。
- 解説を閉じてもう一度解く:答えだけでなく、表や条件判断を再現する。
- 数値を変えて解く:同じ答えを覚えただけか、処理を理解したか区別する。
- 翌日、類題を解く:少し時間を置いてから初見に近い形で試す。
- 誤答理由を1行で残す:「2周目の値を間違えた」「添字を0始まりと思った」など。
間違えた箇所を言語化できると、次に使う学習時間の優先順位も明確になります。
7日間の立て直しメニュー¶
科目B全体を1週間で完成させる計画ではなく、つまずいている原因を発見し、修復するための7日間です。各日の所要時間は、理解度に合わせて調整してください。
| 日 | やること | 合格ラインではなく「できた」の基準 |
|---|---|---|
| 1日目 | 直近の誤答5問を診断 | 上記①〜⑤のどこで間違えたか言える |
| 2日目 | 代入・比較・mod |
短い処理を日本語で説明できる |
| 3日目 | ifと境界条件 | 真偽を小さな値で検証できる |
| 4日目 | for・while | 繰返し回数と更新後の値を書ける |
| 5日目 | 配列・関数 | 添字・引数・戻り値を取り違えない |
| 6日目 | 5〜15行程度の複合問題 | 初見で最後までトレースできる |
| 7日目 | 1日目と同難易度の問題を解く | 誤りの数と原因を比較できる |
1日でわからない場合は次の日に無理に進む必要はありません。基礎があいまいなまま難問に移るより、短い例題を確実に解ける状態を目指しましょう。
科目Bのセキュリティ分野も忘れない¶
科目Bの対策を擬似言語に集中しすぎると、セキュリティ分野への準備が手薄になることがあります。セキュリティの問題は、単語を知っているだけでなく、与えられた状況に対してどの対策が適切かを考えることも重要です。
擬似言語の勉強を立て直しながら、セキュリティの基本用語と事例問題にも継続的に触れておきましょう。
自分の弱点に合わせてGiji Academyで練習する¶
苦手な場所がわかったら、難問を無作為に解くより、対応する教材へ進みましょう。
- 記法・代入が苦手な人:「擬似言語のきほん基本記法」(無料) → 「変数と代入」(無料)
- 条件の判定が苦手な人:「比較と論理式」(無料)
- 繰返し・配列が苦手な人:「ループのトレース」(有料) → 「間違いやすいトレース」(有料)
- 初見の問題で確かめたい人:「擬似言語練習問題」から入門問題を試す。基礎・中級・過去問レベルの問題は有料会員向けです。
最初の一歩:無料の入門範囲で自分が正確に読める場所を確認してください。その先の繰返しや配列で手が止まる場合には、有料の段階別教材で重点練習する方法があります。
まとめ:「難しすぎる」を細かい原因に分けよう¶
科目Bが解けないとき、「全部を勉強し直す」「本番レベルを何十問も解く」と決める必要はありません。
最初に、記法・条件・繰返し・配列と関数・長文読解のどこで止まっているかを切り分けましょう。原因がわかれば、必要な練習も絞れます。
わからない問題の数を数えるより、わからなくなった行を説明できるようになることが、次の一問を自力で解くための土台になります。