こんにちは、フルスタックエンジニアのryuです。
今回の記事では、基本情報技術者試験の科目Bで出題されるアルゴリズムの勉強方法について解説します。
基本情報技術者試験を勉強していると、科目Aはある程度進められるのに、科目Bになった途端に難しく感じることがあります。
特にプログラミング未経験の場合、
「擬似言語を見ても何をしているのか分からない」 「for文やwhile文が何回繰り返されるのか追えない」 「配列が出てくると、途中で変数の値が分からなくなる」
というところでつまずきやすいと思います。
私自身、基本情報技術者試験を勉強した当初はプログラミング未経験でした。現在はWebエンジニアとして仕事をしていますが、最初からアルゴリズムが得意だったわけではありません。
科目Bのアルゴリズムは、問題数をこなすだけではなかなか解けるようになりません。大切なのは、擬似言語の処理を一つずつ追い、「なぜこの値になるのか」を理解できる状態にすることです。
この記事では、プログラミング初心者でも進めやすいアルゴリズムの勉強方法を、順番に解説します。
基本情報技術者試験のアルゴリズムはどう勉強すればいい?¶
現在の基本情報技術者試験では、科目Bでアルゴリズムとプログラミング、情報セキュリティなどが出題されます。
以前の基本情報技術者試験には午前試験・午後試験がありましたが、現在は科目A・科目Bという形式です。そのため、昔の参考書やWeb記事を見ると「午後問題」「午後のアルゴリズム」と書かれていることがあります。
現在対策する場合は、科目Bの形式に合わせて勉強しましょう。
科目Bのアルゴリズム対策で、私がおすすめする順番はこちらです。
- 擬似言語の記法を理解する
- 条件分岐と繰返しを理解する
- 配列を追えるようにする
- 変数の値をトレースする練習をする
- 探索・整列などの基本アルゴリズムを学ぶ
- 科目B形式の問題を解く
- 間違えた問題を「なぜ間違えたか」まで確認する
いきなり過去問や公開問題を何十問も解くより、この順番で進めた方が理解しやすいです。
まずは擬似言語の読み方を覚える¶
最初にやるべきなのは、難しいアルゴリズムを暗記することではありません。
まずは、科目Bで使われる擬似言語の基本的な記法を理解しましょう。
例えば、次のような処理です。
x ← 10
if (x > 5)
x ← x + 1
endif
この程度であれば、プログラミング経験がある方はすぐに読めると思います。
しかし未経験の場合、
←は何を意味するのかifは何をしているのかx ← x + 1はなぜ成立するのか
といった部分から分からないことがあります。
ここを曖昧なまま進めてしまうと、問題が長くなったときに一気についていけなくなります。
まずは、変数、代入、比較演算、条件分岐、繰返し、配列、関数・手続など、擬似言語の基本を一つずつ理解してください。
条件分岐と繰返しは実際に値を追う¶
科目Bで特につまずきやすいのが、if、for、whileなどの処理です。
例えば、次の擬似言語を見てみましょう。
sum ← 0
for (iを1から3まで1ずつ増やす)
sum ← sum + i
endfor
この処理を見て、すぐに答えだけ考えるのではなく、変数の値を表にしてみます。
| i | sum |
|---|---|
| 開始時 | 0 |
| 1 | 1 |
| 2 | 3 |
| 3 | 6 |
このように追えば、最後のsumが6になることが分かります。
科目Bでは、頭の中だけで全部追おうとすると途中で分からなくなりやすいです。特に繰返しが二重になったり、配列が組み合わさったりすると、一気に難しくなります。
最初のうちは面倒でも、変数の値を書き出してください。
慣れてくると、「ここは書かなくても追える」「ここだけ表にした方がいい」という判断ができるようになります。
配列は「添字」と「値」を分けて考える¶
科目Bで苦手な人が多いのが配列です。
例えば、
array ← {10, 20, 30, 40}
という配列があったとします。
問題を解いている途中で、
array[i]
と書かれると、「今どの値を見ているのか」が分からなくなることがあります。
この場合も、配列を頭の中だけで追うのではなく、表にして確認すると分かりやすいです。
| 添字 | 値 |
|---|---|
| 1 | 10 |
| 2 | 20 |
| 3 | 30 |
| 4 | 40 |
そのうえで、現在のiがいくつなのかを確認します。
科目Bでは、アルゴリズムそのものが分からないというより、途中で「変数の値」「配列の添字」「何回目のループなのか」が分からなくなり、問題を解けなくなるケースがかなりあります。
だからこそ、まずは処理を正確に追える力を身につけることが大切です。
擬似言語は実行しながら学ぶと理解しやすい¶
擬似言語を勉強するときに困るのが、一般的なプログラミング言語のように、そのまま実行できる環境が少ないことです。
参考書のコードを読んで、
「たぶんこう動くんだろうな」
で終わってしまうと、理解したつもりになりやすいです。
そこで、擬似言語を勉強するときは、できれば自分でコードを動かし、入力や変数を変えながら結果を確認するのがおすすめです。
擬似言語学習サイトのGiji Academyでは、基本情報技術者試験の科目Bで使う擬似言語を、ブラウザ上のシミュレーターで実行しながら学習できます。
例えば、条件分岐や繰返しを学んだあとに実際にコードを実行して、
「条件を変えると、どちらの処理に進むのか」 「ループ回数を変えると、変数がどう変化するのか」 「配列の添字を変えると、どの値が取得されるのか」
を自分で確認できます。
擬似言語をただ暗記するのではなく、「コードを書いて、動かして、結果を見る」という形で理解したい方は利用してみてください。
登録しなくても無料で体験できます。
基本アルゴリズムは処理の意味を理解する¶
擬似言語をある程度読めるようになったら、探索や整列などの基本アルゴリズムへ進みます。
例えば、科目B対策として理解しておきたい内容には次のようなものがあります。
- 線形探索
- 二分探索
- バブルソート
- 選択ソート
- 挿入ソート
- スタック
- キュー
- 再帰
- 文字列処理
ここでも、「二分探索はこういうコード」と丸暗記するのはおすすめしません。
例えば二分探索なら、
- 真ん中の値を確認する
- 探したい値より大きいか小さいかを判断する
- 探す範囲を半分にする
- もう一度真ん中を確認する
という流れを理解することが大切です。
処理の意味が分かっていれば、問題で少し書き方が変わっても対応できます。
逆にコードだけを暗記していると、変数名や処理の順番が変わっただけで解けなくなります。
参考書は「読むだけ」で終わらせない¶
参考書を使って勉強する場合も、読むだけで終わらせないことが大切です。
アルゴリズムの説明を読んで「なるほど」と思っても、実際に問題を見ると解けないことはよくあります。
参考書を読んだら、
- 自分で変数の値を追う
- 配列を表にする
- 処理を日本語で説明してみる
- 同じアルゴリズムの別問題を解く
ところまでやってみてください。
アルゴリズム自体を深く勉強したい場合は、次のような書籍もあります。
問題解決力を鍛える!アルゴリズムとデータ構造¶
うかる!基本情報技術者試験[午後・アルゴリズム編]¶
こちらは2021年版で、現在とは試験制度が異なります。現在の科目B対策用としてそのまま使うのではなく、アルゴリズムの考え方を補助的に理解する目的で利用してください。
アルゴリズム図鑑 絵で見て分かる26のアルゴリズム¶
基本情報全体の勉強もあわせて行いたい方はこちらの記事もご覧ください。
基本情報技術者試験にオススメ参考書5選紹介!【科目A・科目Bをしっかり対策】
最後は科目B形式の問題を解く¶
基礎を学んだあとは、実際の科目B形式の問題を解きます。
ここで大切なのは、正解したかどうかだけで終わらせないことです。
間違えた問題について、
「擬似言語の記法が分からなかったのか」 「ループ回数を間違えたのか」 「配列の添字を間違えたのか」 「アルゴリズム自体を理解していなかったのか」
まで確認してください。
原因が分かれば、次に何を勉強すればよいのかが分かります。
例えば配列の添字で何度も間違えるなら、難しい問題をさらに10問解くより、一度配列の基礎へ戻った方が効率的です。
また、IPAから科目Bのサンプル問題や公開問題が公開されています。試験前には必ず公式問題にも触れて、問題文の長さや擬似言語の書き方に慣れておきましょう。
科目Bはアルゴリズムだけでなくセキュリティも対策する¶
科目Bを勉強するときは、アルゴリズムだけに集中しすぎないようにしましょう。
情報セキュリティも出題範囲です。
セキュリティは用語を暗記するだけではなく、
「このネットワーク構成では、どこに問題があるのか」 「この攻撃を防ぐには、どの対策が必要なのか」 「この状況で安全な運用方法は何か」
といった形で、状況を読んで考える力も必要になります。
Giji Academyでは、擬似言語だけではなく、科目Bに関連するセキュリティ問題も実践的に学習できるようにしています。
アルゴリズムとセキュリティを別々の試験対策として考えるのではなく、科目B全体を少しずつ進めていくのがおすすめです。
基本情報技術者試験のアルゴリズムの勉強方法まとめ¶
今回の記事では、基本情報技術者試験の科目Bで出題されるアルゴリズムの勉強方法について解説しました。
アルゴリズムが苦手な場合、いきなり難しい問題をたくさん解く必要はありません。
まずは、
- 擬似言語の記法を理解する
- 条件分岐・繰返しを追う
- 配列を理解する
- 変数の値をトレースする
- 探索・整列などを理解する
- 科目B形式の問題を解く
という順番で進めてください。
特に大切なのは、解説を読んで「なんとなく分かった」で終わらせないことです。
自分で処理を追い、なぜその答えになるのか説明できる状態まで理解する。その積み重ねで、少し長い擬似言語でも落ち着いて読めるようになります。
Giji Academyでは、擬似言語をブラウザ上で実行しながら、変数、条件分岐、繰返し、配列、関数、探索・整列などを段階的に学べます。
科目Bの擬似言語が苦手な方は、まず無料で実際にコードを動かしてみてください。

![うかる! 基本情報技術者 [午後・アルゴリズム編] 2021年版 福嶋先生の集中ゼミ (日本経済新聞出版)](https://m.media-amazon.com/images/I/51CLANtoLqL._SL500_.jpg)




