大学入学共通テスト(情報) 過去問
令和5年度(2023年度)追・再試験
問39 (<旧課程>情報関係基礎(第3問) 問8)

このページは閲覧用ページです。
履歴を残すには、 「新しく出題する(ここをクリック)」 をご利用ください。

問題

大学入学共通テスト(情報)試験 令和5年度(2023年度)追・再試験 問39(<旧課程>情報関係基礎(第3問) 問8) (訂正依頼・報告はこちら)

次の文章を読み、問いに答えよ。

ある個別指導塾では、午後の時間帯を、第1時限から第5時限までの五つの時限に分けて講義を開講している。受講生は時限を指定して、指導を受ける。
時限ごとに受講生数をまとめたところ、第1時限から順に10、8、19、14、7(人)となった。この個別指導塾では、一対一での指導を行っている。そのため、講義を開講するには、この受講生数と同じ人数の講師を各時限に割り当てる必要がある。
講師は、複数の時限の講義を連続して担当することがある。そこで、塾の講師割り当て担当者は、講師の人数を担当開始時限・終了時限ごとにまとめた担当表を作成することにした。
はじめに、各講師が一つの時限のみを担当する場合を考え、表3の担当表を作成した。これは、表の開始時限と終了時限が等しい要素(以下、対角要素と呼ぶ。)に、各時限の受講生数と同じ講師人数を記したものである。表の合計値が58であることから、その日に出勤して講義を担当する講師の人数が58人であることがわかる。なお、以下では担当表の「開始時限k,終了時限s」の要素を【k,s】と表記する。

ここでは3時限以上連続で担当する場合について考えていく。
例えば、第2時限から第4時限まで3時限連続で担当する講師をn人設定する場合、【2,4】にnを記したうえで、表3の網掛けで示した人数8、19、14をnずつ減らすことになる。

ここで、【2,4】に設定できる人数の上限について考える。【2,4】にnを設定するには、網掛けで示した人数をnずつ減らす必要があるが、担当表には負の人数は記せない。そのため、【2,4】に設定できる人数の上限は、表3の網掛けで示した「該当する対角要素」の最小値である8となる。
以下、【k,s】に設定できる人数の上限を【k,s】に記し、担当表を書き換える操作を【k,s】に着目した集約と呼ぶ。表3に対して、【2,4】に着目した集約を行った後の担当表は表4になる。
【k,s】に着目した集約を行う手続きを作成していくうえでは、まず【k,s】に設定できる人数の上限を求める必要がある。そこで、ある時限帯(開始時限~終了時限)に対応する「該当する対角要素」の最小値を求める手続き(図2)を作成した。この手続きでは、開始時限をhajime、終了時限をowariに格納して時限帯を指定すると、2次元配列Hyouを参照し、最小値をsaisyouに格納する。なお、最小値を求めるうえでは、まずHyouの対角要素のhajime番目に格納された値をsaisyouの初期値としている。その後、対角要素のowari番目までに格納された値について、順番にsaisyouと比較している。
表3の初期状態の担当表の人数が2次元配列Hyouに格納されている状態で、図2の手続きを実行し、開始時限に1、終了時限に5を入力したとき、(06)行目の処理は( サ )回実行される。

( ク )にあてはまるものを1つ選べ。
問題文の画像
  • 0
  • hajime
  • owari
  • saisyou
  • i
  • Hyou[hajime,hajime]
  • Hyou[hajime,owari]
  • Hyou[owari,owari]
  • Hyou[hajime,i]
  • Hyou[i,i]
  • Hyou[i,owari]

次の問題へ

正解!素晴らしいです

残念...

この過去問の解説 (2件)

01

図2の(05)行目は「もし(ク)>(ケ)ならば」という条件判定で、真のときに(06)でsaisyouを更新します。最小値を求めるロジックとして「現在の最小値saisyouが次の対角要素より大きければ更新する」という形が正しいので、(ク)=saisyouとなります。

選択肢1. 0

0は定数です。最小値の比較に使う変数ではないので誤りです。

選択肢2. hajime

hajimeは開始時限の番号です。最小値の比較条件に使う変数ではありません。

選択肢3. owari

owariは終了時限の番号です。講師人数の比較には使いません。

選択肢4. saisyou

(05)行目の条件「saisyou>ケ」が成立するとき、saisyouより小さい値が見つかったとしてsaisyouを更新します。この形が最小値探索として正しいので、(ク)=saisyouが正解です。

選択肢5. i

iはループカウンタで時限番号を示します。講師人数の大小比較の左辺には使いません。

選択肢6. Hyou[hajime,hajime]

Hyou[hajime,hajime]は初期値として(03)で既にsaisyouに代入済みです。ループ中の比較の左辺として再び使うのは不自然です。

選択肢7. Hyou[hajime,owari]

Hyou[hajime,owari]は連続担当人数の要素で対角要素ではありません。最小値の比較対象としては不適切です。

選択肢8. Hyou[owari,owari]

Hyou[owari,owari]は終了時限の対角要素です。ループ中のすべての時限で比較する左辺には使えません。

選択肢9. Hyou[hajime,i]

Hyou[hajime,i]は対角要素ではない場合があります。最小値比較の条件式に使うには不適切です。

選択肢10. Hyou[i,i]

Hyou[i,i]は(ケ)に入る値として正しいものです。(ク)に入れると「Hyou[i,i]が自分自身より大きい」という意味になり、常に偽になるため誤りです。

選択肢11. Hyou[i,owari]

Hyou[i,owari]は一般に対角要素ではありません。比較の左辺として使う理由がありません。

まとめ

最小値を探すには「現在の最小値候補saisyouが、次の要素Hyou[i,i]より大きいとき、saisyouを更新する」という条件が必要です。よって(ク)=saisyouです。

参考になった数0

02

(03)行目では、Hyou[hajime,hajime]に格納されている値を変数saisyouの初期値とします。

そのうえで(04)〜(08)行目では、開始時限の次の時限を担当する講師の人数と、変数saisyouの値とを比較して、次の時限の講師数の方が少なければsaisyouの値を書き換えてから、さらに次の時限の講師数と比較する、という処理を繰り返しています。

 

その中でこの問いは、(04)〜(08)の繰り返し処理のうち、(05)行目の「もし〜ならば」という条件判定の内容を読み解く問題です。

選択肢4. saisyou

(05)行目の条件判定では、便宜上の最小値である変数saisyouと、次の時限に講義を担当する講師数とを比較します。

条件判定には不等号「>」がありますので、空欄「ク」または空欄「ケ」のどちらかに変数saisyouが入って、

 

仮定A saisyouの方が空欄「ケ」より大きければ、(06)行目を実行する

仮定B 空欄「ク」の方がsaisyouより大きければ、(06)行目を実行する

 

のいずれかになると予想されます。

ですが(06)行目は変数saisyouに新しい値(新しい最小値)を入れる処理ですので、空欄「ク」の値の方が大きい、つまり変数saisyouが便宜上の最小値のままであるのに、最小値を書き換えるという仮定Bは、矛盾しています。

 

ですので仮定A、つまり空欄「ク」にsaisyouを入れるのが正しい、ということです。

 

参考になった数0