科目 B 試験 アルゴリズムとプログラミング 対策はプログラミングを経験すること|科目 A 試験・科目 B 試験サンプル問題セットからわかる傾向と対策 (2)


2023-05-23 更新

2022 年 12 月 26 日に情報処理推進機構から新制度の基本情報技術者試験のサンプル問題セット(科目 A 試験と科目 B 試験それぞれ 1 回分のサンプル問題)が公開されました。 受験を予定されている人は、大いに興味があるでしょう。

そこで、

  1. 科目 A 試験
  2. 科目 B 試験 アルゴリズムとプログラミング
  3. 科目 B 試験 情報セキュリティ

の 3 回に分けて、サンプル問題セットの内容から、新制度の試験の出題傾向と対策を解説します。 今回は、「科目 B 試験 アルゴリズムとプログラミング」を取り上げます。

科目 B 試験 アルゴリズムとプログラミング サンプル問題セットの分析

出題傾向 1科目 B 試験 アルゴリズムとプログラミング 全 16 問の構成

まず、出題傾向です。 以下は、サンプル問題セットの科目 B 試験アルゴリズムとプログラミング全 16 問の構成を示したものです。

問題の番号です。
テーマ
筆者が独自に付けたものです。
カテゴリ
情報処理推進機構が公開している資料に示されたカテゴリです。
難易度
筆者の講師経験から、受験者の正解率が 25 % 程度を「難」、 50 % 程度を「中」、 90 % 程度を「易」で示しています。
サンプル問題セットの科目 B 試験 アルゴリズムとプログラミング 全 16 問の構成
テーマ カテゴリ 難易度
1 変数に代入を行うプログラム プログラムの基本要素
2 fizzBuzz の答えを返す関数 プログラムの基本要素
3 配列を処理する関数 プログラムの基本要素
4 最大公約数を求める関数 プログラムの基本要素
5 x2 + y2 の平方根を返す関数 プログラムの基本要素
6 ビットの並びを逆にした値を返す関数 プログラムの基本要素
7 階乗を求める関数 データ構造及びアルゴリズム
8 優先度付きキューを操作する手続 データ構造及びアルゴリズム
9 二分木の全ての節番号を出力する データ構造及びアルゴリズム
10 単方向リストから要素を削除する手続 データ構造及びアルゴリズム
11 配列を昇順にソートする関数 データ構造及びアルゴリズム
12 配列の並びの類似度を返す関数 プログラミングの諸分野への適用
13 不具合があり無限ループになる関数 プログラミングの諸分野への適用
14 配列を特徴づける五つの値を返す関数 プログラミングの諸分野への適用
15 三目並べの手を決定する評価値を得る手順 プログラミングの諸分野への適用
16 Unicode の符号位置を UTF-8 の符号に変換する関数 プログラミングの諸分野への適用

出題傾向 2難易度(かなりの難関である)

難易度を集計すると、

難 = 4 問
中 = 9 問
易 = 3 問

なので、

科目 B 試験 アルゴリズムとプログラミングの正解率の期待値 =
(4 × 0.25 + 9 × 0.50 + 3 × 0.9) ÷ 16
= 51 %

です。 60 % の正解が合格の基準なので、かなりの難関であるといえます。 旧制度のアルゴリズムの問題と比べて、見た目は短くて簡単そうですが、決して甘く考えてはいけません

出題傾向 3問題によって難易度に大きな差がある

問題によって難易度に大きな差があります。 以下に、問題の例を示します。 難易度に「易」を付けた問 1 、および「難」を付けた問 6 です。

どちらもカテゴリは「プログラムの基本要素」ですが、問 1 が「変数」や「代入」という基礎的な知識だけで解けるのに対し、問 6 は「マスク演算」や「シフト演算」といった高度な知識が要求されます。 ここでは、問題を解く必要はありません。 問題の雰囲気だけをつかんでください。

アルゴリズムとプログラミングの問題の例 1 難易度「易」

問 1

次の記述中のに入れる正しい答えを,解答群の中から選べ。

プログラムを実行すると, “” と出力される。

swipeプログラムは横スクロールできます

〔プログラム〕

整数型: x ← 1
整数型: y ← 2
整数型: z ← 3
x ← y
y ← z
z ← x
y の値 と z の値 をこの順にコンマ区切りで出力する

解答群
ア 1, 2  イ 1, 3
ウ 2, 1  エ 2, 3
オ 3, 1  カ 3, 2

出典基本情報技術者試験(科目 B 試験)サンプル問題セット

アルゴリズムとプログラミングの問題の例 2 難易度「難」

問 6

次のプログラム中のに入れる正しい答えを,解答群の中から選べ。

 関数 rev は 8 ビット型の引数 byte を受け取り,ビットの並びを逆にした値を返す。
例えば,関数 rev を rev(01001011) として呼び出すと,戻り値は 11010010 となる。

 なお,演算子 はビット単位の論理積,演算子 はビット単位の論理和,演算子 >> は論理右シフト,演算子 << は論理左シフトを表す。 例えば, value >> n は value の値を n ビットだけ右に論理シフトし, value << n は value の値を n ビットだけ左に論理シフトする。

〔プログラム〕

○8 ビット型: rev(8 ビット型: byte)
 8 ビット型: rbyte ← byte
 8 ビット型: r ← 00000000
 整数型: i
 for (i を 1 から 8 まで 1 ずつ増やす)
   
 endfor
 return r

解答群

r ← (r << 1) ∨ (rbyte ∧ 00000001)
rbyte ← rbyte >> 1
r ← (r << 7) ∨ (rbyte ∧ 00000001)
rbyte ← rbyte >> 7
r ← (rbyte << 1) ∨ (rbyte >> 7)
rbyte ← r
r ← (rbyte >> 1) ∨ (rbyte << 7)
rbyte ← r
出典基本情報技術者試験(科目 B 試験)サンプル問題セット

(問 1 の正解は選択肢カ、問 6 の正解は選択肢アです)

出題傾向 4問題を解くために必要とされる知識

科目 B 試験のアルゴリズムとプログラミングの問題は、旧制度の午後試験ほど長い問題ではないので、長文読解力は要求されません。 ただし、ちゃんとプログラミングの知識があることが要求されます。 この知識は、プログラミングを経験しないと得られない知識です

サンプル問題セットの 16 問を解くには、以下の知識が必要となります。

サンプル問題セットの 16 問を解くために必要とされる知識
テーマ 必要とされる知識
1 変数に代入を行うプログラム 変数、代入
2 fizzBuzz の答えを返す関数 関数の定義、引数、戻り値、if 文
3 配列を処理する関数 配列の定義、要素、 for 文、算術演算子
4 最大公約数を求める関数 if 文、ユークリッドの互除法
5 x2 + y2 の平方根を返す関数 既存の関数の利用
6 ビットの並びを逆にした値を返す関数 2 進数、マスク演算、シフト演算
7 階乗を求める関数 再帰呼び出し
8 優先度付きキューを操作する手続 キュー、既存のクラスの利用、コンストラクタ、メソッド、手続の定義
9 二分木の全ての節番号を出力する手続 二分木、根、節、 2 次元配列、再帰呼び出し
10 単方向リストから要素を削除する手続 単方向リスト、既存のクラスの利用、参照(ポインタ)
11 配列を昇順にソートする関数 ビンソート(バケツソート)、未定義の値
12 2 つの文字列の類似度を返す関数 文字列の処理
13 不具合があり無限ループになる関数 while 文、二分探索、無限ループ
14 配列を特徴づける五つの値を返す関数 プログラムの機能を読み取る
15 三目並べの手を決定する評価値を得る手順 問題に示された手順を読み取る
16 Unicode の符号位置を UTF-8 の符号に変換する関数 2 進数、 16 進数、手順とプログラムを対応付ける

info

「必要とされる知識」には、主な知識だけを示してあり、変数や代入のように、多くのプログラムに共通する知識は示していません。
問 15 では、擬似言語のプログラムは示されておらず、プログラムの手順だけが示されています。

科目 B 試験 アルゴリズムとプログラミング 対策(勉強方法)

ここからは、アルゴリズムとプログラミングの出題傾向を踏まえて、試験対策の解説をさせていただきます。

試験対策 1試験要綱に示された科目 B 試験の出題範囲を知っておこう

2023 年 4 月の試験から、試験要綱 Ver.5.0 が適用されます。

情報処理技術者試験試験要綱 Ver.5.0

この試験要綱の中に、基本情報技術者試験の科目 B 試験の出題範囲(上記 PDF 39 ページより)が示されているので、自分に欠けている知識がないかを確認しておきましょう。

以下は、科目 B 試験のアルゴリズムとプログラミングの出題範囲です。もしも、この中に知らない概念や用語があれば、書籍や Web で調べて知識を補充してください。 試験問題のほとんどは、擬似言語で記述されたプログラムで出題されるので、具体的なプログラムの例を作って学習してください。

  1. プログラミング全般に関すること
    実装するプログラムの要求仕様(入出力,処理,データ構造,アルゴリズムほか)の把握,使用するプログラム言語の仕様に基づくプログラムの実装,既存のプログラムの解読及び変更,処理の流れや変数の変化の想定,プログラムのテスト,処理の誤りの特定(デバッグ)及び修正方法の検討 など

    注記 プログラム言語について,基本情報技術者試験では擬似言語を扱う。

  2. プログラムの処理の基本要素に関すること
    型,変数,配列,代入,算術演算,比較演算,論理演算,選択処理,繰返し処理,手続・関数の呼出し など
  3. データ構造及びアルゴリズムに関すること
    再帰,スタック,キュー,木構造,グラフ,連結リスト,整列,文字列処理 など
  4. プログラミングの諸分野への適用に関すること
    数理・データサイエンス・ AI などの分野を題材としたプログラム など

出典情報処理技術者試験試験要綱 Ver.5.0

info_outline試験範囲のアルゴリズムとデータ構造を解説する連載

新しい擬似言語で学ぶ
科目 B アルゴリズムとプログラミング入門

試験対策 2プログラミングを経験する

旧制度ほど長い問題ではないので、長文読解力は要求されません。ただし、何らかのプログラミング言語の経験があり、基本的なプログラミング技法、アルゴリズム、データ構造を知っていないと解けない内容の問題になっています。

さらに、旧制度の擬似言語にはなかったクラスの利用に関する問題があることにも注意が必要です。 クラスを定義する問題は出ていませんが(擬似言語の記述形式にも、クラスの定義に関するものはありません)、クラスを利用する知識(メンバ変数、メソッド、コンストラクタ、など)は必要です。

クラスやオブジェクトを利用できるプログラミング言語( C++, Java, C#, Python, Visual Basic など)で、プログラミングを経験しておく必要があります。

info_outlineインストールなしでプログラミングを体験する記事

アルゴリズムとプログラミングとは?

試験対策 2テキパキと問題を解く習慣を付けておく

新制度の科目 B 試験では、 20 問を 100 分で解くので、解答時間の目安は 1 問あたり 5 分です(難易度に差があるのであくまでも目安です)。 旧制度と比べると長い問題ではなくなりましたが、 1 問が 5 分ですから、かなり忙しくなるはずです。 学習の段階から、テキパキと問題を解く習慣を付けておくことをお勧めします。

アルゴリズムとプログラミングの分野が苦手な受験者は、比較的時間がかからないと思われる情報セキュリティの分野を先に解くとよいでしょう。

今回は、サンプル問題セットの「科目 B 試験 アルゴリズムとプログラミング」の内容から、新制度の試験の出題傾向と対策を解説しました。 次回は、「科目 B 試験 情報セキュリティ」を取り上げます。

それでは、またお会いしましょう!

label 関連タグ
科目A試験は、
免除できます。
独習ゼミで科目A試験を1年間免除して、科目B試験だけに集中しましょう。
免除試験を受けた 74.9% の方が、
科目A免除資格を得ています。
科目A免除試験 最大 2 回の
受験チャンス !
info_outline
科目A免除試験 最大 2 回の
受験チャンス !
詳しく見てみるplay_circle_filled
label これまでの『資格ガイド』の連載一覧 label 著者