サンプル問題 科目B 問14

問14  次の記述中の [  ] に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は 1 から始まる。

素数が 1 以上で,昇順に整列済みの配列を基に,配列を特徴づける五つの値を返すプログラムである。

関数 summarize を summarize({0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1})として呼び出すと,戻り値は [  ] である。 

〔プログラム〕 

○実数型: findRank(実数型の配列: sortedData, 実数型: p) 
  整数型: i 
  i ← (p × (sortedDataの要素数 - 1)) の小数点以下を切り上げた値 
  return sortedData[i + 1] 
 
○実数型の配列: summarize(実数型の配列: sortedData) 
  実数型の配列: rankData ← {}  /* 要素数0の配列 */ 
  実数型の配列: p ← {0, 0.25, 0.5, 0.75, 1} 
  整数型: i 
  for (i を 1 から pの要素数 まで 1 ずつ増やす) 
    rankDataの末尾 に findRank(sortedData, p[i])の戻り値 を追加する 
  endfor 
  return rankData 

解答群 

ア  {0.1, 0.3, 0.5, 0.7, 1} 

イ  {0.1, 0.3, 0.5, 0.8, 1} 

ウ  {0.1, 0.3, 0.6, 0.7, 1} 

エ  {0.1, 0.3, 0.6, 0.8, 1} 

オ  {0.1, 0.4, 0.5, 0.7, 1} 

カ  {0.1, 0.4, 0.5, 0.8, 1} 

キ  {0.1, 0.4, 0.6, 0.7, 1} 

ク  {0.1, 0.4, 0.6, 0.8, 1} 

出典:基本情報技術者試験 サンプル問題

どういう問題なのか

問題をぱっと見た感じは、なんだかごちゃごちゃしているように思いました。しかし、やっていることはsortedData配列に対して、配列pで指定される位置の値を取り出す、わりと単純なもののようです。

解いてみる

pの各要素について、sortedData配列の要素数-1を掛けて小数点以下を切り上げます。

 0 × 9 = 0 → 0

 0.25 × 9 = 2.25 → 3

 0.5 × 9 = 4.5 → 5

 0.75 × 9 = 6.75 → 7

 1 × 9 = 9 → 9

配列の要素番号にするために+1して、pの各要素についてsortedData配列から値を取り出して、rankData配列に追加していきます。

 rankData = { 0.1, 0.4, 0.6, 0.8, 1 }

答え:ク

感想

sortedData配列の25%、50%、75%のところ値を取るのかと思ったら、1つずれていますね。問題文に「配列を特徴づける五つの値」という印象的な言葉があったのですが、どのあたりが特徴付けるのか、良くわかりませんでした。

補足

「配列を特徴づける五つの値」という言葉が気になっていろいろ調べたところ、次の動画を見つけました。

www.youtube.com

パーセンタイル、四分位数という言葉が出てきたので調べました。

パーセンタイル(percentile)

計測値の分布(ばらつき)を小さい数字から大きい数字に並べ変え、パーセント表示することによって、小さい数字から大きな数字に並べ変えた計測値においてどこに位置するのかを測定する単位。

例えば、計測値として100個ある場合、5パーセンタイルであれば小さい数字から数えて5番目に位置し、50パーセンタイルであれば小さい数字から数えて50番目に位置し、95パーセンタイルであれば小さい方から数えて95番目に位置する。

企業年金連合会

四分位数 quartile points

データを小さい順に並べて、下から1/4のところのデータを第1四分位数、2/4のところのデータを第2四分位数(これは中央値と同じ)、3/4のところのデータを第3四分位数という。そして、第1四分位数、第2四分位数、第3四分位数をまとめて、四分位数という。

総務省 統計局

統計の言葉でした。理解できました。