旧制度の午前・午後と、2023年度以降の科目A・科目Bの公開問題を区別しています。現在の試験対策では現行シラバスと科目Bの形式を確認してください。公開問題は本試験の全出題を網羅する資料ではありません。
2024年度 科目B 公開問題の概要
3値の最大値を求める条件分岐
プログラミング · 条件分岐 / 論理演算 / 擬似言語
異なる3つの整数 x, y, z を引数として受け取り、その中の最大値を返す関数 maximum のプログラムがある。 プログラム中の空欄に入れる正しい条件式を解答群の中から選べ。 〔プログラム〕 ○整数型: maximum(整数型: x, 整数型: y, 整数型: z) if ( [ 空欄 ] ) return x elseif (y > z) return y else return z endif
解答・解説を表示
解答
イ
解説
まず要点:x が最大値だと判定するには、x が y より大きく、かつ z より大きいことを同時に確かめます。片方としか比べていないと、比べていない値の方が大きい場合に間違った答えを返してしまうからです。2つの条件を「かつ」(and:両方が成り立つときだけ真になる)でつなぎます。
解き方
- if で return x を実行する条件は、x が y と z の両方より大きいことだと整理します。
- 「x > y」と「x > z」を and でつないだ式を選びます。
- 選択肢 ア不正解
- x > y だけでは z との大小が分からず、z が最大のときでも x を返してしまうから誤りです。
- 選択肢 イ正解
- x が y より大きく、しかも z より大きいときだけ x が最大なので、この式は正しいです。
- 選択肢 ウ不正解
- y > z という必要のない条件が入っているため、x > z > y のときに x を返せなくなるから誤りです。
- 選択肢 エ不正解
- x > z だけでは y との大小が分からず、y が最大のときでも x を返してしまうから誤りです。
- 選択肢 オ不正解
- z > y という必要のない条件が入っているため、x > y > z のときに x を返せなくなるから誤りです。
- 選択肢 カ不正解
- x と比べていないので x が最大かどうかを判定できず、条件として使えないから誤りです。
覚えるポイント
- 最大値判定では比較対象のすべての要素より大きいことを確認する
- elseif以降の処理では手前の条件が不成立である前提を利用できる
間違えやすいところ
- x と y の比較だけで x を最大と決めてしまう誤りです。
- y と z の大小まで最初の条件に入れてしまう誤りです。
出題の前提:基本情報技術者試験 科目B 擬似言語仕様および論理演算の基本仕様に基づく。
出典:IPA『2024年度 科目B 公開問題』
公式問題冊子 p.4 ↗(www.ipa.go.jp)
2進文字列から整数への基数変換アルゴリズム
プログラミング · 基数変換 / ホーナー法 / 文字列処理
引数として与えられた“0”と“1”だけから成る1文字以上の文字列を、符号なし2進数と解釈したときの整数値を返す関数 convDecimal がある。 関数 convDecimal が利用する関数 int は、引数が“0”なら 0、“1”なら 1 を返す。 プログラム中の空欄に入れる正しい式を解答群の中から選べ。 〔プログラム〕 ○整数型: convDecimal(文字列型: binary) 整数型: i, length, result ← 0 length ← binaryの文字数 for (i を 1 から length まで 1 ずつ増やす) result ← [ 空欄 ] endfor return result
解答・解説を表示
解答
エ
解説
まず要点:2進数を上位の桁から順に処理するときは、それまでの合計を2倍してから新しい桁の値を足します。1桁進むと重みが2倍になるので、この手順で正しい値になります。この計算方法をホーナー法といいます。
解き方
- ループが最上位の桁(i=1)から最下位の桁(i=length)へ進むことを確認します。
- 1桁進むごとに result を2倍して、その桁の値を足す式を導きます。
- 選択肢 ア不正解
- 2倍する処理がなく、各桁の数をただ足すだけなので位の重みが正しく反映されないから誤りです。
- 選択肢 イ不正解
- 位の重み(2のべき乗)を表す2倍の掛け算がなく、文字の値の合計になってしまうから誤りです。
- 選択肢 ウ不正解
- 下位の桁から取り出しているので、ホーナー法では位の重みが逆になってしまうから誤りです。
- 選択肢 エ正解
- 上位の桁から2倍しながら新しい桁の値を足す、正しいホーナー法の式だから正解です。
覚えるポイント
- 上位桁からの基数変換は「既存結果×基数+次の桁」を繰り返す
- 下位桁から計算する場合は各桁に2の重みを掛けて累積する必要がある
間違えやすいところ
- i を最下位の桁と勘違いして重みを逆に計算してしまう誤りです。
- result を2倍し忘れて、文字の値を数えるだけにしてしまう誤りです。
出題の前提:基本情報技術者試験 科目B 擬似言語および数値計算・基数変換の標準的解法に基づく。
出典:IPA『2024年度 科目B 公開問題』
公式問題冊子 p.5 ↗(www.ipa.go.jp)
無向グラフの辺リストから隣接行列への変換
データ構造とアルゴリズム · 無向グラフ / 隣接行列 / 対称行列
グラフの各頂点には1から順に整数番号が付けられており、無向グラフの辺を表す要素数2の配列の配列 edgeList を隣接行列 adjMatrix に変換する関数 edgesToMatrix がある。 隣接行列は頂点 i と頂点 j を結ぶ辺があるとき i 行 j 列が 1、それ以外は 0 となる正方行列である。無向グラフでは対称行列となる。 プログラム中の空欄に入れる正しい処理を解答群の中から選べ。 なお、配列の要素番号は1から始まる。 〔プログラム〕 ○整数型の二次元配列: edgesToMatrix(整数型配列の配列: edgeList, 整数型: nodeNum) 整数型の二次元配列: adjMatrix ← {nodeNum行nodeNum列の 0} 整数型: i, u, v for (i を 1 から edgeListの要素数 まで 1 ずつ増やす) u ← edgeList[i][1] v ← edgeList[i][2] [ 空欄 ] endfor return adjMatrix
解答・解説を表示
解答
エ
解説
まず要点:無向グラフ(辺に向きがないグラフ)の隣接行列(辺の有無を1と0で表す表)は、対角線をはさんで左右が同じ対称行列になります。頂点 u と v を結ぶ辺があるときは、adjMatrix[u, v] と adjMatrix[v, u] の両方を 1 にします。
解き方
- 辺のリスト edgeList[i] から両端の頂点番号 u と v を取り出していることを確認します。
- 無向グラフでは u から v、v から u の両方につながりがあるので、[u, v] と [v, u] の両方に1を入れます。
- 選択肢 ア不正解
- 対角成分の adjMatrix[u, u] を1にしており、自分自身への辺を表すので誤りです。
- 選択肢 イ不正解
- 対角成分の [u, u] と [v, v] を1にしており、頂点同士のつながりを表せないから誤りです。
- 選択肢 ウ不正解
- 片方向だけを表す式で、無向グラフが持つ対称行列の性質を満たさないから誤りです。
- 選択肢 エ正解
- 無向グラフなので [u, v] と [v, u] の両方を1にしており、正しいです。
- 選択肢 オ不正解
- 片方向の [v, u] だけを1にしており、対称行列にならないから誤りです。
- 選択肢 カ不正解
- 対角成分の [v, v] だけを1にしており、辺を記録していないから誤りです。
覚えるポイント
- 無向グラフの隣接行列は必ず対称行列になる
- 辺(u, v)を表現する際は[u, v]と[v, u]の両方を1にする
間違えやすいところ
- 有向グラフと混同して片方向だけを1にしてしまう誤りです。
- 頂点番号を行と列ではなく対角成分に入れてしまう誤りです。
出題の前提:基本情報技術者試験 科目B グラフ理論および二次元配列操作の仕様に基づく。
出典:IPA『2024年度 科目B 公開問題』
公式問題冊子 p.6 ↗(www.ipa.go.jp) / 公式問題冊子 p.7 ↗(www.ipa.go.jp)
整列済み配列のマージアルゴリズムのトレース
データ構造とアルゴリズム · マージ / トレース / 整列アルゴリズム
昇順に整列された整数型配列 data1 及び data2 を併合して昇順に整列された配列を返す関数 merge がある。 関数 merge を merge({2, 3}, {1, 4}) として呼び出したとき、/*** α ***/ の行(data2 の残りを work に格納する処理)が実行される回数として正しい答えを解答群の中から選べ。 なお、配列の要素番号は1から始まる。
解答・解説を表示
解答
イ
解説
まず要点:整列済みの2つの配列を併合(マージ)するときは、それぞれの先頭どうしを比べて小さい方を順に取り出します。片方が空になったら、もう片方に残った要素をそのまま後ろに付け加えます。
解き方
- data1={2, 3}, data2={1, 4} として、i=1, j=1, k=1 から主ループを順に追います。1回目は 2 > 1 なので else 側で work[1]=1, j=2, k=2。2回目は 2 ≦ 4 なので if 側で work[2]=2, i=2, k=3。3回目は 3 ≦ 4 なので if 側で work[3]=3, i=3, k=4 となります。
- i=3 となって主ループが終わり、続く while (i ≦ n1) は実行されません。最後の while (j ≦ n2) は j=2, n2=2 なので1回だけ実行され、αの行は1回実行されます。
- 選択肢 ア不正解
- data2 の最後の要素4がまだ残っているので、0回(実行されない)ではないから誤りです。
- 選択肢 イ正解
- 残った data2 の要素4を work に入れるために、この行はちょうど1回実行されるので正解です。
- 選択肢 ウ不正解
- data2 の要素1は主ループの中で先に入れており、残りは1つなので2回にはならないから誤りです。
- 選択肢 エ不正解
- data2 の要素は全部で2つしかないので、3回実行されることはないから誤りです。
関連する分野を学ぶ
覚えるポイント
- マージソートの併合処理は主ループ+2つの残余処理ループで構成される
- 一方のインデックスが上限を超えた時点で主ループが終了する
間違えやすいところ
- 主ループでどちらの配列の要素を採用したかの数を取り違える誤りです。
- ループが終わるときの添字が増えた後の値であることを見落とす誤りです。
出題の前提:基本情報技術者試験 科目B 擬似言語およびアルゴリズムのトレース問題に基づく。
出典:IPA『2024年度 科目B 公開問題』
公式問題冊子 p.8 ↗(www.ipa.go.jp) / 公式問題冊子 p.9 ↗(www.ipa.go.jp)
商品間の関連度計算プログラムの空欄補充
プログラミング · 関連度計算 / 配列操作 / 二重ループ
商品xと商品yが同一注文で購入されやすい傾向を示す関連度 Lxy を、Lxy = (Mxy × 全注文数) / (Kx × Ky) で計算する手続 putRelatedItem がある。 ここで Mxy は商品xとyが同時に購入された注文数、Kx は商品xが購入された注文数、Ky は商品yが購入された注文数を表す。 プログラム中の空欄 a ~ c に入れる正しい答えの組合せを解答群の中から選べ。 なお、配列の要素番号は1から始まる。
解答・解説を表示
解答
オ
解説
まず要点:関連度の式 Lxy = (Mxy × 全注文数) / (Kx × Ky) に当てはまるように、各変数の役割を整理します。同時購入の数は2つの条件がそろったときに足し、相手の商品だけの出現数は外側の条件が成り立ったときに足します。
解き方
- 内側の条件「order に item と otherItems[i] の両方が含まれる」で足すのは同時購入数 Mxy なので、a は arrayM[i] です。
- その外側の「order に otherItems[i] が含まれる」で足すのは相手商品の出現数 Ky なので、b は arrayK[i] です。
- 関連度の式 valueL ← (arrayM[i] × c) ÷ (itemCount × arrayK[i]) の分子は全注文数なので、c は orders の要素数です。
- 選択肢 ア不正解
- a と b の配列が逆で、さらに c も全注文数ではなく商品の数になっているから誤りです。
- 選択肢 イ不正解
- c は正しいですが、a と b に入れる配列が互いに逆になっているから誤りです。
- 選択肢 ウ不正解
- a と b が逆で、c も全注文数ではなく比較対象の商品数になっているから誤りです。
- 選択肢 エ不正解
- a と b は正しいですが、c が全商品数となっていて注文数と合わないから誤りです。
- 選択肢 オ正解
- a が同時購入数 arrayM[i]、b が相手の購入数 arrayK[i]、c が全注文数 orders の要素数となり、すべて合っているから正解です。
- 選択肢 カ不正解
- a と b は正しいですが、c が比較対象の商品数(otherItems の要素数)になっていて適切でないから誤りです。
答えの内訳
- a:arrayM[i]
- itemとotherItems[i]の両方が同一注文に含まれている場合にカウントされるため、同時購入数Mを表すarrayM[i]が入ります。
- b:arrayK[i]
- otherItems[i]が注文に含まれている場合にカウントされるため、商品y単独の購入数Kを表すarrayK[i]が入ります。
- c:ordersの要素数
- 関連度の計算式の分子にある「全注文数」に対応するため、注文データの配列ordersの要素数が入ります。
覚えるポイント
- 同時購入数Mxyは両方の存在条件が重なる内側ブロックでカウントする
- 式の分子にある全注文数は注文配列ordersの要素数に一致する
間違えやすいところ
- 全注文数と全商品数(allItems の要素数)を混同してしまう誤りです。
- 二重 if の内側と外側で数える対象(M と K)を逆にしてしまう誤りです。
出題の前提:基本情報技術者試験 科目B 擬似言語およびデータ分析アルゴリズムに基づく。
出典:IPA『2024年度 科目B 公開問題』
公式問題冊子 p.10 ↗(www.ipa.go.jp) / 公式問題冊子 p.11 ↗(www.ipa.go.jp) / 公式問題冊子 p.12 ↗(www.ipa.go.jp)
テレワーク環境におけるクラウド直接接続とセキュリティ対策
情報セキュリティ · 多要素認証 / 2要素認証 / テレワークセキュリティ / ローカルブレイクアウト
A社ではテレワークにおいて社内PCへのリモートデスクトップを利用していたが、社内ネットワークの通信量逼迫を解消するため、社内ネットワークを経由せずにクラウドサービスへ直接接続する設定変更を検討した。 しかし、従来行っていた社内IPアドレスによるアクセス制限が解除されるため、クラウドサービスへの不正アクセスのリスクが増加する。 このリスクを低減するために情報システム部に依頼する対策として、最も適切なものを解答群の中から選べ。
解答・解説を表示
解答
ウ
解説
まず要点:社内のIPアドレスによるアクセス制限をやめて、インターネットからクラウドへ直接つなぐ場合は、認証を強くする対策が必要です。IDとパスワードが盗まれたときの不正アクセスを防ぐために、多要素認証(2要素認証:2つの異なる方法で本人確認する仕組み)を導入します。
解き方
- 直接接続に変えると「社内ネットワークからのみアクセスできる」という守りが失われ、パスワードが漏れたときの危険が増えることを押さえます。
- 認証を強くして不正アクセスを防ぐ対策として、知識情報に所持情報などを組み合わせる2要素認証の導入を選びます。
- 選択肢 ア不正解
- 直接接続する端末は社内ネットワークを通らないので、社内からの通信監視では不正アクセスを防げないから誤りです。
- 選択肢 イ不正解
- 通信速度を制限しても不正アクセスは防げず、かえって仕事の便利さが下がるだけだから誤りです。
- 選択肢 ウ正解
- 社外からの直接アクセスに2要素認証を導入すれば、パスワードが漏れても第三者の不正ログインを防げるから正解です。
- 選択肢 エ不正解
- グループウェアだけを直接接続にしても、そのグループウェアへの不正アクセスの危険は減らないから誤りです。
- 選択肢 オ不正解
- 保存禁止機能を無効にすると、私物PCへのデータ持ち出しができて情報漏えいの危険が増すから誤りです。
関連する分野を学ぶ
覚えるポイント
- 社外からのクラウド直接接続には多要素(2要素)認証による認証強化が有効
- IPアドレス制限の解除時には認証基盤のセキュリティ向上で補う
間違えやすいところ
- 直接接続では社内ネットワークを通らない点を見落とし、社内通信の監視を選んでしまう誤りです。
- 通信量を減らす対策と、セキュリティの危険を減らす対策を混同してしまう誤りです。
出題の前提:基本情報技術者試験 科目B セキュリティ分野のクラウドおよびテレワーク環境におけるアクセス制御基準に基づく。
出典:IPA『2024年度 科目B 公開問題』
公式問題冊子 p.14 ↗(www.ipa.go.jp) / 公式問題冊子 p.15 ↗(www.ipa.go.jp)
2024年度 科目B 公開問題
参照した公式資料
IPAが公開した2024年度 科目B 公開問題の問題・解答資料です。

