科目B

基本情報技術者試験 科目B サンプル問題セット(2022年12月公表) 問11

次の記述中の に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は 1 から始まる。 関数 binSort を binSort( ) として呼び出すと,戻り値の配列には未定義の要素は含まれておらず,値は昇順に並んでいる。 〔プログラム〕
○整数型の配列: binSort(整数型の配列: data)
  整数型: n ← dataの要素数
  整数型の配列: bins ← {n個の未定義の値}
  整数型: i

  for (i を 1 から n まで 1 ずつ増やす)
    bins[data[i]] ← data[i]
  endfor

  return bins
答えを選ぶ

出典:基本情報技術者試験 科目B サンプル問題セット(2022年12月公表) 問11(問題文は IPA の公開問題。図・数式・下線などはテキストに直して掲載。解説は当サイト作成)

科目Bの解き方と全問の一覧

解説に誤りを見つけたら、解説の誤りを報告してください。

答えと解説を見る

正解:ア

覚える知識

ビンソート(分布数え上げ)の前提(値の重複なし・範囲内)

ビンソートは値そのものを格納位置(要素番号)にして並べる方法。値が範囲内で重複がなければ、比較なしで昇順に並ぶ。

この問題で必要なこと

値 v を bins[v] に入れるので、未定義の要素が残らないためには、data が 1〜n の値を重複なく 1 個ずつ含む必要がある。n=6 で 1〜6 が全部そろうのはア {2,6,3,1,4,5}。正解はア。

ひっかけ

イ(4 が重複・6 がない)、ウ(2 が重複・3 がない)、エ(3 が重複・1 がない)はどれも空きのビンが残る。値の範囲だけを見て重複を見落とすと選んでしまう。