基本情報技術者試験の科目Bの公開問題を題材に,配列の併合(マージ)処理について学習します。この問題では,2つの整列された配列を1つの配列にまとめる処理を確認します。
令和6年度 基本情報技術者試験 公開問題 科目B 問4
問 次の記述中の に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は1から始まる。
関数 merge は,昇順に整列された整数型の配列 data1 及び data2 を受け取り,これらを併合してできる昇順に整列された整数型の配列を返す。
関数 merge を merge({2,3},{1,4}) として呼び出すと,/*** α ***/ の行は 。
〔プログラム〕
○整数型の配列: merge(整数型の配列: data1,整数型の配列: data2)
整数型: n1 ← data1の要素数
整数型: n2 ← data2の要素数
整数型の配列: work ← {(n1 + n2)個の 未定義の値}
整数型: i ← 1
整数型: j ← 1
整数型: k ← 1
while ((i ≦ n1) and (j ≦ n2))
if (data1[i] ≦ data2[j])
work[k] ← data1[i]
i ← i + 1
else
work[k] ← data2[j]
j ← j + 1
endif
k ← k + 1
endwhile
while (i ≦ n1)
work[k] ← data1[i]
i ← i + 1
k ← k + 1
endwhile
while (j ≦ n2)
work[k] ← data2[j] /*** α ***/
j ← j + 1
k ← k + 1
endwhile
return work
解答群
| ア 実行されない | イ 1回実行される |
| ウ 2回実行される | エ 3回実行される |
【解答】イ
【解説】
mergeは,2つの昇順に整列された配列を比較し,小さい値から順番に別の配列へ格納する処理である。merge({2,3},{1,4}) では,最初の while 文で 1,2,3 の順に work へ格納される。この時点で data1 の要素は全て処理され,data2 には4が残っている。そのため,3番目の while 文で残った4を work に格納する。この処理は1回だけ行われるので,/*** α ***/ の行も1回実行される。
この問題のポイント
この問題から学べることは,
- 整列された2つの配列を比較しながら,1つの配列にまとめる方法
- 2つの配列の要素を小さい順に取り出す方法
- 一方の配列の要素がなくなった後,残った要素を処理する方法
- i,j,k の値を追跡して,配列の変化を確認する方法
です。特に,2つの配列を比較して小さい方の要素を順番に格納し,一方の配列がなくなった後は,もう一方の配列の残りの要素をそのまま格納する処理を理解しておきましょう。
基本情報技術者試験の学習におすすめの参考書
基本情報技術者試験の合格を目指す方におすすめの参考書です。
学習のお役に立ちましたら
この記事が少しでも学習のお役に立ちましたら,今後も分かりやすい解説や学習コンテンツを継続してお届けする励みになります。
よろしければ、このサイトを応援いただけますと嬉しいです。
※OFUSEは,クリエイターやコンテンツ制作を直接支援できるサービスです。


