科目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 の公開問題。図・数式・下線などはテキストに直して掲載。解説は当サイト作成)
解説に誤りを見つけたら、解説の誤りを報告してください。
答えと解説を見る
正解:ア
覚える知識
ビンソート(分布数え上げ)の前提(値の重複なし・範囲内)
ビンソートは値そのものを格納位置(要素番号)にして並べる方法。値が範囲内で重複がなければ、比較なしで昇順に並ぶ。
この問題で必要なこと
値 v を bins[v] に入れるので、未定義の要素が残らないためには、data が 1〜n の値を重複なく 1 個ずつ含む必要がある。n=6 で 1〜6 が全部そろうのはア {2,6,3,1,4,5}。正解はア。
ひっかけ
イ(4 が重複・6 がない)、ウ(2 が重複・3 がない)、エ(3 が重複・1 がない)はどれも空きのビンが残る。値の範囲だけを見て重複を見落とすと選んでしまう。