アルゴリズムとプログラミング

基本情報技術者試験次の擬似言語は、ともに昇順整列済みの 2 つの配列 L と R を 1 つの昇順配列にマージする手続である。L…

アルゴリズムとプログラミングアルゴリズムとプログラミング計算問題難易度:hard
次の擬似言語は、ともに昇順整列済みの 2 つの配列 L と R を 1 つの昇順配列にマージする手続である。L = {11, 27, 38}、R = {9, 25, 40}(どちらも添字は 1 から)を与えて実行したとき、戻り値の配列 res の内容はどれか。
○配列: merge(整数型の配列: L, 整数型の配列: R)
  整数型の配列: res ← {}(空)
  整数型: i ← 1, j ← 1
  while (i <= Lの要素数 かつ j <= Rの要素数)
    if (L[i] <= R[j])
      res の末尾に L[i] を追加; i ← i + 1
    else
      res の末尾に R[j] を追加; j ← j + 1
    endif
  endwhile
  i <= Lの要素数 の間 L[i] を res に追加し i を進める
  j <= Rの要素数 の間 R[j] を res に追加し j を進める
  return res
{11, 27, 38, 9, 25, 40}
{9, 11, 25, 38, 27, 40}
{9, 11, 25, 27, 38, 40}
{40, 38, 27, 25, 11, 9}
正解
ウ.{9, 11, 25, 27, 38, 40}

マージは L と R の先頭同士を比較し小さい方を res に移す操作の繰り返しである。9→11→25→27→38 と取り、最後に R の 40 が残って追加され {9,11,25,27,38,40} となるため ウが正しい。

?選択肢ごとの解説

ア ×比較を行わず L を全部出してから R を全部出した {11,27,38,9,25,40} であり、while の比較を無視した誤りである。
イ ×途中で比較対象を取り違え 38 と 27 の順序が逆になった {9,11,25,38,27,40} であり、添字 i,j の更新ミスによる誤りである。
ウ ○マージは L と R の先頭同士を比較し小さい方を res に移す操作の繰り返しである。9→11→25→27→38 と取り、最後に R の 40 が残って追加され {9,11,25,27,38,40} となるため ウが正しい。
エ ×昇順ではなく降順に並べた {40,…,9} であり、比較演算子の向きを逆にした誤りである。
この問題の「深掘り・誤答の完全解説・覚え方」は、登録すると読めます。

基本情報技術者試験は全4,036問。公開しているのはその一部で、登録すると残りも一問ごとにAI解説つきで解けます。SRS暗記カード・全真模試・弱点診断まで。

登録は1分・クレジットカード不要。無料のまま練習・暗記カード・模試まで使えます。

作成・校閲:ukamiru編集部 · 基本情報技術者試験 過去問 · fe-b-algo-0039

【基本情報技術者試験】次の擬似言語は、ともに昇順整列済みの 2 つの配列 L と…|正解「{9, 11, 25,…」|ukamiru 過去問