PD試験 データ・AI
PD試験(仮称)データ・AI区分 サンプル問6(得点を補正するプログラム)の解説
プロフェッショナルデジタルスキル(データ・AI)試験(仮称)の科目Bサンプル問6を、スマホで解いて確かめられます。中央値を基準に得点を補正する擬似言語のプログラムを、実際の値で順に追う解き方を解説します。
PD試験 データ・AI
科目Bサンプル問題 問6
IPA 公表問題
次の記述中の[ a ]に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は1 から始まる。
関数correction は,100 点満点の試験の得点を昇順に格納した整数型の配列を引数score で受け取り,ある方法で補正した得点を配列に格納して返す。ただし,受け取る得点は0 以上の整数とし,0 又は100 が過半数を占めることはないものとする。
関数correction をcorrection({20, 30, 30, 30, 60, 80}) として呼び出したときの戻り値の配列には,値が50 以上の要素が[ a ]個含まれる。
〔プログラム〕
- ○整数型の配列: correction(整数型の配列: score)
- 整数型: n ← scoreの要素数
- 整数型: i, m
- 実数型: center // scoreの中央値
- 整数型の配列: cvalue ← {n個の 未定義の値} // 補正後の得点
- 実数型: buff
- if (n が奇数)
- m ← (n + 1) ÷ 2 の商
- center ← score[m]
- else
- m ← n ÷ 2 の商
- center ← (score[m] + score[m + 1]) ÷ 2 // 実数として計算する
- endif
- for (i を 1 から n まで 1 ずつ増やす)
- if (score[i] が center 以下)
- buff ← (50 ÷ center) × score[i]
- else
- buff ← (50 ÷ (100 - center)) × (score[i] - center) + 50
- endif
- cvalue[i] ← buff を小数第1位で四捨五入した値
- endfor
- return cvalue
答えと選択肢ごとの根拠を見る
正解:オ(5) IPA 公表の解答例による
ア × 誤り 50以上の要素を、一部しか数えなかった
1個ではない。補正後の配列は{33, 50, 50, 50, 71, 86}で、50以上は5個。50のものだけで3個ある。
イ × 誤り 「50以上」を「50を超える」と読んだ
2個ではない。補正後の配列は{33, 50, 50, 50, 71, 86}で、50以上は5個。50を超えるのは71と86の2個だが、問題は50以上なので、50ちょうどの3個も数える。
ウ × 誤り 50ちょうどの要素だけを数えた
3個ではない。補正後の配列は{33, 50, 50, 50, 71, 86}で、50以上は5個。50のものが3個で、そこに71と86が加わる。
エ × 誤り 補正後の値の計算を1か所誤った
4個ではない。補正後の配列は{33, 50, 50, 50, 71, 86}で、50以上は5個。中央値30より大きい60と80が71と86になり、30以下の30が3個とも50になる。
オ ○ 正しい
要素数 n は6で偶数なので、m は3、center は(score[3]+score[4])÷2=(30+30)÷2=30。各要素を補正する。20は center の30以下なので、50÷30×20=33.3…で、四捨五入して33。30は30以下なので、50÷30×30=50で、50。30、30も同じで50、50。60は30より大きいので、50÷(100-30)×(60-30)+50=71.4…で、四捨五入して71。80は、50÷70×50+50=85.7…で、四捨五入して86。補正後の配列は{33, 50, 50, 50, 71, 86}で、50以上は5個。
カ × 誤り 先頭の20も補正後に50以上になると考えた
6個ではない。補正後の配列は{33, 50, 50, 50, 71, 86}で、50以上は5個。先頭の20は、center の30以下なので50÷30×20=33.3…で、四捨五入して33。50未満なので数えない。
解説
答えはオ:50以上の要素は5個
正解はオ(5個)です。IPAは出題趣旨で、この問題を、データを補正するアルゴリズムを題材に、中央値の算出や条件分岐を含む擬似言語のプログラムを読み解き、処理の内容を理解したうえで結果を導く能力を評価するものとしています。
この問題は、知識より、プログラムを正しく追えるかが問われます。引数の配列は {20, 30, 30, 30, 60, 80} の6個です。この値を代入して、順に計算します。
手順1:中央値(center)を求める
要素数 n は6で偶数なので、else の側に進みます。
- m ← n ÷ 2 の商 = 3
- center ← (score[3] + score[4]) ÷ 2 = (30 + 30) ÷ 2 = 30
配列の要素番号は1から始まるので、score[3] と score[4] は、3番目と4番目の30です。
手順2:要素ごとに補正する
center は30です。for の中で、score[i] が center 以下かどうかで式が変わります。30以下は 50÷30×得点、30より大きいときは 50÷70×(得点−30)+50 です。
| 得点 | 計算 | 四捨五入後 |
|---|---|---|
| 20 | 50÷30×20 = 33.3… | 33 |
| 30 | 50÷30×30 = 50 | 50 |
| 30 | 同上 | 50 |
| 30 | 同上 | 50 |
| 60 | 50÷70×(60−30)+50 = 71.4… | 71 |
| 80 | 50÷70×(80−30)+50 = 85.7… | 86 |
補正後の配列は {33, 50, 50, 50, 71, 86} です。50以上の要素は、50が3個と、71、86で、合わせて5個です。
間違えやすいところ:「以下」と「50以上」の境目
この補正は、中央値を50点に写して、中央値以下の得点を0〜50の範囲に、中央値より大きい得点を50〜100の範囲に、それぞれ伸ばし縮みさせる式です。中央値と等しい得点は、「center 以下」の側に入るので、補正後は50になります。
2個(71と86だけ)を選ぶのは、「50以上」を「50を超える」と読んだ場合です。50ちょうどの3個を数え忘れないようにします。もう1つは、20の数え間違いです(当サイトの想定)。20は補正後に33になり、50には届きません。
時間をかけないコツ:境目の値だけを確かめる
解く時間の目安は4分ほどです(当サイトの推測)。2つの式はどちらも、得点が大きいほど補正後の値も大きくなります。中央値の30は補正後に50になり、30より小さい20は50未満、30より大きい60と80は50より大きくなります。つまり、補正後に50以上になるのは、得点が中央値以上の要素です。中央値以上の要素は、30が3個と、60、80で、5個と分かります。ただし、中央値の求め方(偶数個のときは真ん中の2つの平均)は、手順1で確かめておく必要があります。
実務の目で見ると:補正のロジックを、境界の値で確かめる
得点の補正のように、データを加工するプログラムは、中央値と等しいデータ、最小値、最大値など、境界の値で動きを確かめておくと、誤りを見つけやすくなります。この問題でも、30のように分岐の境目に当たる値が3個あり、「以下」か「より大きい」かの読み違いが、答えに出る作りです。
シラバス案(Ver.0.1)の科目Bの項目「4-3」には、アルゴリズムを実装したプログラムを読み解き、その動作を正しく把握するスキルが含まれています。この問題は、その力を、擬似言語のプログラムを追って結果を出す形で問うものです。
この解説について
問題と解答例はIPAの公表物です。選択肢ごとの根拠と解き方は、当サイトが書いた解説で、IPAの公式な解説ではありません(IPAは解説を公表していません)。出典は、IPAの「プロフェッショナルデジタルスキル(データ・AI)試験(仮称)科目Bのサンプル問題」(2026年10月30日掲載)です。問題文は出典を明記して、教育目的で載せています。IPAによると、サンプル問題は新しい出題分野と形式のイメージを共有するためのもので、実際の試験と同様の問題作成やチェックのプロセスを経たものではありません。
参考にした資料
独立行政法人情報処理推進機構(IPA)(確認)