新らしくなった基本情報 科目 B アルゴリズムとプログラミング サンプル問題4をJavaにしてみました

2023 年 4 月からIPA (独立行政法人情報処理推進機構)の基本情報技術者試験の制度が変更されました。

ここでは、「基本情報技術者試験 科目 B のサンプル問題」の中から、アルゴリズムとプログラミングの問題を取り上げ、Javaのソースコードを示します。

新人エンジニア研修に参加されている皆様の参考になれば幸いです。

問 4

次の記述中の  a  ~  c  に入れる正しい答えの組合せを,解答群の中から選べ。ここで,配列の要素番号は 1 から始まる。

要素の多くが 0 の行列を疎行列という。

次のプログラムは,二次元配列に格納された行列のデータ量を削減するために,疎行列の格納に適したデータ構造に変換する。

関数 transformSparseMatrix は,引数 matrix で二次元配列として与えられた行列を,整数型配列の配列に変換して返す。

関数 transformSparseMatrix を transformSparseMatrix({{3, 0, 0, 0, 0}, {0, 2, 2, 0, 0}, {0, 0, 0, 1, 3}, {0, 0, 0, 2, 0}, {0, 0, 0, 0, 1}})として呼び出したときの戻り値は,{{  a  }, {  b  }, {  c  }} である。

【プログラム】

◯整数型配列の配列: transformSparseMatrix(整数型の二次元配列: matrix)
整数型: i, j
整数型配列の配列: sparseMatrix
sparseMatrix ← {{}, {}, {}} /* 要素数0の配列を三つ要素にもつ配列 */
for (i を 1 から matrixの行数 まで 1 ずつ増やす)
 for (j を 1 から matrixの列数 まで 1 ずつ増やす)
  if (matrix[i, j] が 0 でない)
   sparseMatrix[1]の末尾 に iの値 を追加する
   sparseMatrix[2]の末尾 に jの値 を追加する
   sparseMatrix[3]の末尾 に matrix[i, j]の値 を追加する
  endif
 endfor
endfor
return sparseMatrix


【解答群】

abc
1, 2, 2, 3, 3, 4, 51, 2, 3, 4, 5, 4, 53, 2, 2, 1, 2, 3, 1
1, 2, 2, 3, 3, 4, 51, 2, 3, 4, 5, 4, 53, 2, 2, 1, 3, 2, 1
1, 2, 3, 4, 5, 4, 51, 2, 2, 3, 3, 4, 53, 2, 2, 1, 2, 3, 1
1, 2, 3, 4, 5, 4, 51, 2, 2, 3, 3, 4, 53, 2, 2, 1, 3, 2, 1

【Javaプログラム】※ただし、メソッドの戻り値のところで配列ではなく文字列の形で固めて表示させていますことをご了承ください。

【結果】

1223345 1234545 3221321