🎯 この記事を読み終わるころには、この問題が解けるようになります!
【例題】
「関数maximumは、異なる3つの整数(x, y, z)を引数で受け取り、そのうちの最大値を返す。
〇整数型: maximum(整数型: x, 整数型: y, 整数型: z)
if( )
return x
elseif(y > z)
return y
else
return z
endif
空欄に入る正しい答えはどれか。
ア. x>y イ. x>y and x>z ウ. x>y and y>z エ. x>z」
前回は知的財産権・セキュリティ関連法規・労働関連法規を学びました。今回は「[科目B]の合格戦略」を徹底解説します。科目Bの出題構成(アルゴリズム約16問・情報セキュリティ約4問)・擬似言語の仕組みと記述形式・プログラムの基本要素(変数・配列・スタック・キュー・再帰)・情報セキュリティ対策・過去問解説まで、試験合格に必要なすべてを解説します!
目次
- 科目Bとはどんな試験か?
- 科目Bの出題構成(全体像)
- 擬似言語とは?(なぜ擬似言語なのか)
- 擬似言語の記述形式(if・while・for・do-while)
- アルゴリズムとプログラミング対策
- プログラムの基本要素(変数・配列・型)
- データ構造(スタック・キュー・木・グラフ)
- 整列アルゴリズム
- 情報セキュリティ対策
- 過去問チャレンジ!(6問)
- この章のまとめ
1. 科目Bとはどんな試験か?
科目Bは基本情報技術者試験の後半の試験です。科目Aとは出題内容・難易度ともに異なります。
| 項目 | 内容 |
|---|---|
| 出題形式 | 多肢選択式(3〜10択) |
| 問題数 | 全20問 |
| 合格基準点 | 600点(科目A・科目Bの両方で基準点以上が必要) |
| 出題範囲 | ①プログラミング全般 ②プログラムの処理の基本要素 ③データ構造及びアルゴリズム ④プログラミングの諸分野への適用 ⑤情報セキュリティの確保 |
📝 ポイント
「科目Bは科目Aよりも難易度が高い!しっかりと対策を立てて計画的に学習することが合格の鍵!」
2. 科目Bの出題構成(全体像)
▲ 科目Bの出題構成と合格戦略の図解
科目Bの全20問は大きく2つに分かれます:
| 分野 | 問題数 | 割合 | キーワード |
|---|---|---|---|
| アルゴリズムとプログラミング(★メイン) | 約16問 | 約80% | 擬似言語・変数・配列・スタック・キュー・再帰・整列 |
| 情報セキュリティ | 約4問 | 約20% | 脆弱性管理・マルウェア対策・アクセス管理 |
📌 重要
「科目Bは80%がアルゴリズムとプログラミング★」「まずアルゴリズムの基礎をしっかり固めることが合格の最短ルート!」
3. 擬似言語とは?(なぜ擬似言語なのか)
擬似言語(ぎじげんご)とは、特定のプログラミング言語に依存しない、「人間が理解しやすい形で書かれた架空のプログラム言語」です。
| 項目 | 内容 |
|---|---|
| 科目Bで使われる言語 | 擬似言語(特定の実在する言語ではない) |
| Java・Pythonの習得は必要か | 不要!ただしJava/Pythonの入門書で学習すると効果的 |
| 擬似言語の文法は覚えるか | 不要!文法は問題文に記載される |
| 擬似言語が採用された理由 | 各言語の特徴より「プログラム言語全般に共通の原理原則」を重視するため |
📝 ポイント
「擬似言語の文法は問題文に記載される★」「特定のプログラム言語を事前に習得する必要はない!」「ただしプログラムの基本原理は理解が必要」
4. 擬似言語の記述形式(if・while・for・do-while)
▲ 擬似言語の記述形式(選択処理・繰返し処理)の図解
擬似言語の主な構文4種類:
| 構文名 | 記述形式 | 意味 |
|---|---|---|
| 選択処理(if文) | if(条件式1) 処理1 elseif(条件式2) 処理2 else 処理n+1 endif | 条件が真のとき処理を実行 |
| 前判定繰返し(while文) | while(条件式) 処理 endwhile | 条件が真の間、処理を繰り返す |
| 後判定繰返し(do-while文) | do 処理 while(条件式) | 処理後に条件をチェック(必ず1回実行) |
| 繰返し処理(for文) | for(変数を初期値から終値まで増分ずつ) 処理 endfor | 指定回数繰り返す |
📝 ポイント
「// で始まる行は注釈(コメント)」「elseif・elseの組みは複数記述または省略できる」「do-whileは後判定なので必ず1回は実行される」が頻出!
5. アルゴリズムとプログラミング対策
3つの対策ポイント:
| ステップ | 内容 |
|---|---|
| ① プログラム言語の基本を身につける | 変数・型・配列・比較演算・繰返し処理・関数などの基本要素を理解する |
| ② 過去問題を一刻も早く解く | IPAの公式サイトで科目Bの過去問題が公開されている。出題形式とレベル感を確認する |
| ③ Java・Pythonの入門書で学習 | 擬似言語はJava・Pythonに似ているため、どちらかの入門書での学習が効果的 |
📝 ポイント
「科目Bの過去問題URL:https://www.ipa.go.jp/shiken/mondai-kaiotu/sg_fe/koukai/index.html」「過去問題は無料公開されているので必ず活用しよう!」
6. プログラムの基本要素(変数・配列・型)
▲ アルゴリズムとプログラミング 基礎知識まとめ
変数・配列・型の基本:
| 概念 | 内容 | 例 |
|---|---|---|
| 変数 | 値を1つ格納する名前付きの箱 | x ← 10 |
| 型(整数型・文字列型・実数型) | 変数に格納できるデータの種類 | 整数型: 1, 2, 3 / 文字列型: “hello” |
| 配列 | 複数の値を番号付きで格納するデータ構造 | array[1]=10, array[2]=20 |
| 代入 | 変数に値を格納する操作 | x ← 5 (矢印は代入を表す) |
📌 重要
「配列の要素番号は1から始まることが多い★」「変数への代入は← (矢印)で表現される」
7. データ構造(スタック・キュー・木・グラフ)
| データ構造 | 特徴 | 操作 | 覚え方 |
|---|---|---|---|
| スタック(Stack)(★頻出) | 後入れ先出し(LIFO:Last In First Out) | push(追加)/ pop(取り出し) | 皿の積み重ね。最後に積んだ皿を最初に取る |
| キュー(Queue)(★頻出) | 先入れ先出し(FIFO:First In First Out) | enqueue(追加)/ dequeue(取り出し) | 行列(並んだ順に進む) |
| 木構造(Tree) | 親子関係を持つ階層データ構造 | 探索・挿入・削除 | 家系図・ファイルシステム |
| グラフ(Graph) | 頂点(ノード)と辺(エッジ)で構成されるデータ構造 | 隣接行列・隣接リスト | SNSの友人関係・地図の経路 |
📌 重要
「スタック=LIFO(後入れ先出し)」「キュー=FIFO(先入れ先出し)」★この違いが頻出!「グラフの隣接行列表現★(科目B頻出)」
8. 整列アルゴリズム
| アルゴリズム | 方法 | 特徴 |
|---|---|---|
| バブルソート | 隣り合う要素を比較・交換を繰り返す | 実装は簡単だが計算量は O(n²) |
| 選択ソート | 未整列部分から最小値を探し先頭に移動 | 実装は簡単。計算量 O(n²) |
| 挿入ソート | 各要素を適切な位置に挿入 | 少ない要素に対して効率的 |
| マージソート | 分割統治法(配列を分割→整列→結合) | 計算量 O(n log n)。安定ソート |
📝 ポイント
「整列アルゴリズムの比較問題は科目B頻出★」「マージ関数(merge)の動作を理解しておくことが重要!」
9. 情報セキュリティ対策
| ポイント | 内容 |
|---|---|
| 出題数 | 全20問中 約4問(全体の20%) |
| 出題範囲 | 本書第3章〜第13章(テクノロジ分野全体) |
| 問題文の特徴 | 1問につき約1000〜2000文字の長文問題 |
| 対策① | 科目Aのテクノロジ分野の過去問題をたくさん解く |
| 対策② | 長文に慣れる(必要な情報は「たった数行」であることが多い) |
| 対策③ | 令和元年以前の「午後問題」の情報セキュリティ分野を演習 |
📌 重要
「第11章(情報セキュリティ)だけでは不十分★」「ネットワーク・クラウド・データベースの用語も科目Bに登場する!」「長文の大半は重要でない。必要な情報を素早く探す練習をしよう!」
10. 過去問チャレンジ!(6問)
✅ 問題1(冒頭例題 解答)
正解:イ(x>y and x>z)
解説:
関数maximumは3つの整数の最大値を返す。if文でxを返すためには「xがyより大きい かつ xがzより大きい」ことが必要。よって条件式は「x>y and x>z」となる。
【過去問 その2】
「2進数の文字列を10進数の整数値に変換する関数convDecimalのプログラムがある。”10010″を与えると18が返る。for文の繰り返し処理の空欄に入るものはどれか。
ア. result + int(binaryの(length-i+1)文字目)
イ. result + int(binaryのi文字目)
ウ. result × 2 + int(binaryの(length-i+1)文字目)
エ. result × 2 + int(binaryのi文字目)」(令和6年度)
💡 解答・解説
正解:エ(result × 2 + int(binaryのi文字目))
解説:2進数→10進数変換は「各桁×2のn乗の和」。先頭から処理するとresultを2倍にしてから次の桁を足す処理になる。”10010″で検証:0→0×2+1=1→1×2+0=2→2×2+0=4→4×2+1=9→9×2+0=18。エが正解。
【過去問 その3】
「グラフの隣接行列を生成する関数edgesToMatrixのプログラムで、辺{1,3}があるとき隣接行列のどこに1を入れるか。
ア. adjMatrix[u,u]←1、adjMatrix[v,v]←1
イ. adjMatrix[u,u]←1
ウ. adjMatrix[u,v]←1のみ
エ. adjMatrix[u,v]←1、adjMatrix[v,u]←1」(令和5年度)
💡 解答・解説
正解:エ(adjMatrix[u,v]←1、adjMatrix[v,u]←1)
解説:無向グラフの隣接行列は対称行列。辺{u,v}がある場合、u行v列とv行u列の両方に1を入れる必要がある。
【過去問 その4】
「昇順に整列された配列data1={2,3}とdata2={1,4}をマージする関数merge({2,3},{1,4})を呼び出すとき、/* a */
の行は何回実行されるか。
ア. 実行されない イ. 1回 ウ. 2回 エ. 3回」(令和4年度)
💡 解答・解説
正解:イ(1回実行される)
解説:while(i≤n1 and j≤n2)ループでdata1とdata2を比較しながらworkに格納。{2,3}と{1,4}のマージ処理をトレースすると、/* a */(data2の残りを処理するループ)は最後の要素4を処理するため1回だけ実行される。
【過去問 その5】
「2要素認証について正しく説明しているものはどれか。
ア. 2種類のパスワードを使って認証する方式
イ. 「記憶」「所持品」「生体情報」のうち2つの要素を組み合わせて認証する方式
ウ. パスワードと指紋を使って認証する方式のみを指す
エ. 二段階認証と同じ意味である」(令和3年度)
💡 解答・解説
正解:イ(記憶・所持品・生体情報のうち2つの要素を組み合わせる方式)
解説:2要素認証(2FA)は「記憶(パスワード)」「所持品(スマホ・ICカード)」「生体情報(指紋・顔)」の3要素のうち2種類を組み合わせた認証。単に2回認証する「二段階認証」とは概念が異なる場合がある。
【過去問 その6】
「テレワーク環境でクラウドサービスへの直接接続を導入する際、不正アクセスリスク増加への対策として最も適切なものはどれか。
ア. 社内ネットワークからクラウドサービスへの通信を監視する
イ. クラウドサービスとの通信速度を制限する
ウ. 社外からのクラウドサービスへのアクセスに2要素認証を導入する
エ. クラウドサービスへの直接接続の対象をグループウェアのみにする」(令和元年度・午後)
💡 解答・解説
正解:ウ(2要素認証を導入する)
解説:社内ネットワークを介さない直接接続では「社内ネットワークからのみアクセス可能」という制限が意味をなさなくなる。不正アクセスリスク増加への対策として、2要素認証の導入が最も有効。
11. この章のまとめ
📌 [科目B]の合格戦略まとめ
- 科目Bの概要: 全20問・多肢選択式・合格基準600点
- 出題構成: アルゴリズムとプログラミング約16問(80%)+情報セキュリティ約4問(20%)★
- 擬似言語: 特定の言語に依存しない架空の言語。文法は問題文に記載されるので覚える必要なし!★
- 擬似言語の構文: if/elseif/else/endif・while/endwhile・do/while・for/endfor
- プログラムの基本要素: 変数・型・配列・代入・算術演算・比較演算・繰返し・関数
- スタック: LIFO(後入れ先出し)push/pop★
- キュー: FIFO(先入れ先出し)enqueue/dequeue★
- 木構造・グラフ: 隣接行列でグラフを表現(科目B頻出)★
- 整列アルゴリズム: バブルソート・選択ソート・挿入ソート・マージソート
- 情報セキュリティ対策: 第3章〜第13章を重点学習・長文問題に慣れる
- 過去問: IPAの公式サイトで無料公開中。一刻も早く解いて出題傾向を把握!
- 2要素認証: 記憶・所持品・生体情報の中から2種類を組み合わせた認証方式★
学習難易度:★★★★☆(アルゴリズムの理解には時間がかかる。プログラムをトレースする練習を繰り返そう!)
この記事について
基本情報技術者試験の合格を目指す方のために、参考書の内容を初心者向けにわかりやすく噛み砕いて解説しています。ITの基礎をしっかり固めて、一緒に合格を目指しましょう!
