2025.06.27ブログ
2025大学入学共通テスト 情報I 大問3解説:工芸部の担当割りのプログラム Part2
先日投稿した2025年大学入学共通テストの大問3の解説の続編です。前回の問1では計画立案のための情報整理、問2では、情報の構造を理解してプログラムの処理の道筋を考えるといった問題でした。まだ見ていない方はぜひこちらからご覧ください。今回は、最後の問3についての解説です。ではいってみましょう。

画像出典:ImageFX
出題内容
問3
次の文章を読み、空欄【ケ】~【シ】に入れるのに最も適当なものを、後の解答群のうちから一つずつ選べ。
次にKさんは、工芸部の部員数と、表1のような各工芸品の製作日数を用いて、図2のような一覧を表示するプログラムを作ることにした。
表1 各工芸品の製作日数(再掲)
図2 各工芸品の担当と期間を一覧にしたメールの文面(再掲)
表1をプログラムで扱うために、Kさんは工芸品の番号順に製作日数を並べた配列 Nissu (添字は1から始まる。)を用意した。さらに、工芸品数9が代入された変数 kougeihinsu, 各部員が空きになる日付を管理する配列 Akibi, 部員数3が代入された変数 buinsu を用いて、図2の一覧を表示するプログラムを作成した(図5)。
工芸品の番号を表す変数 kougeihin を用意し、(05)~(11)行目で各工芸品に対して順に担当と期間を求めていく。
図5 各工芸品の担当と期間の一覧を表示するプログラム
ケ ・ コ の解答群 ⓪ kougeihin、① tantou、② buin、③ buinsu、④ kougeihinsu
サ ・ シ の解答群 ⓪ Nissu[kougeihin]、① Nissu[tantou]、② Nissu[kougeihin] - 1、③ Nissu[tantou] - 1、④ Nissu[kougeihin - 1]、⑤ Nissu[tantou - 1]
解説
空欄【ケ】【コ】
問題解決の手段は第一に情報の整理です。それぞれの変数が何の情報を表すものであるかをまとめます。Nissuは各工芸品の製作日数、kougeihinsuは工芸品の総数です。また、kougeihinは工芸品の番号を表す変数とあります。以前の記事でも説明しましたが、その他についてもまとめると、Akibiは各部員の空き日、buinsuは部員の総数、buinは部員の番号、tantouは工芸品の製作を担当する部員の番号です。また、問題の内容も整理すると、(05)~(11)行目で各工芸品に対して順に担当と期間を求めていくとあります。つまり、(07)のループでは、担当できる部員を一つずつチェックしていく処理なので、その外側の(05)のループは各工芸品を一つずつチェックする処理だと分かります。各工芸品をすべてチェックしていくので、1から順に工芸品の総数までチェックするため、解答は以下の通りとなります。
【ケ】⓪ kougeihin
【コ】④ kougeihinsu
空欄【サ】【シ】
次に空欄の【サ】、【シ】についてです。【サ】については、工芸品の番号、それを担当する部員、そして、何日から何日まで担当するのかを表示しています。そして、問題となっているのは、「何日まで」の部分ですが、作業日数はNissuに記録しているのでこれを使えばよいと分かります。ただし、注意する点として、そのままNissu[kougeihin]を選んでしまうと、「空き日 + 作業日数」となり、空き日の作業当日を含めない日数となってしまうため、1日多くなってしまいます。そのため、【サ】は② Nissu[kougeihin] - 1 が答えです。そして、【シ】については、Akibi[tantou]にある数を代入していますが、これは空き日の設定だと分かります。次の空き日は作業終了日の翌日であるため、「空き日 + 作業日数」が答えとなります。つまり、【シ】は⓪ Nissu[kougeihin] が答えです。解答をまとめると以下の通りです。
【サ】② Nissu[kougeihin] - 1
【シ】⓪ Nissu[kougeihin]

学習のポイント
問3のプログラムが示す「情報の価値」とは、複数の異なる情報(この場合は「各工芸品の製作日数リスト Nissu 」と「部員の空き日リスト Akibi」)が、明確な目的(全工芸品の割り当て)のために連携し、構造化されて管理されることで、初めてシステム全体が機能し、大きな価値を生み出すという点にあります。Nissu がなければ製作期間が分からず、Akibi がなければ誰がいつ作業できるかが分かりません。このプログラムは、これらの情報を統合的に扱い、定められた手順(アルゴリズム)に従って処理することで、手作業では煩雑な割り当て作業をすぐに計算し、担当者ごとの作業一覧表を生み出しています。少し別の例でも考えてみましょう。例えば、フードデリバリーサービスなど、リアルタイムに注文がどんどんと入っていく場合では、割り当てをすぐに計算できるとよいですね。便宜上、本来のシステムよりも簡素化して説明しますが、注文と配達員の配列情報を用意するとします。注文の配列には、注文ごとに配達にかかるおおよその所要時間が入っていて、配達員の配列にはスタッフ番号ごとに手の空く時間が入っているとします。例題の工芸品の割当のように、配達員の配列から一番早く手が空く人を見つけ、次の配達の注文を割り当てることで、計算できそうではないですか?もちろん、注文と配達員の配列情報を作るためには他の様々な情報を組みわせるため、そう簡単にはできません。しかし、このように複数の配列というデータ構造を組み合わせることで、手作業では困難な「最適な割り当て」を見つけ出すための計算が可能になる利点は、ご理解いただけたのではないでしょうか。
まとめ
今回も最後までお読みいただき、ありがとうございました。この記事が、単なる問題解説を超えて、皆さんの知的な探求心を刺激し、情報やプログラミングの本質に触れる面白さを少しでもお伝えできていれば幸いです。私たちタイムレスエデュケーションは、プログラミング学習を通じて、お子様一人ひとりが持つ「こうしたい!」という想いを形にし、「なるほど!」という知的な喜びを発見し、「伝えたい!」という情熱を表現できるよう、信頼できる「伴走者」としてサポートします。お問い合わせを心よりお待ちしております。
コースについて
お問い合わせはこちら!