はじめに
まだまだ未熟ものですがお手柔らかにお願いします。
今回は令和7年度の共通テストの大問3で出題されたアルゴリズムを私が唯一学んでいるpythonで書き換えていきたいと思います。
さっそくスタート✨
令和7年度情報1問題
参考:https://www.dnc.ac.jp/albums/abm.php?d=771&f=abm00005965.pdf&n=2025_op_43_joho1.pdf
概要
伝統工芸品を部員で効率よく担当を振り分けるアルゴリズムです。
1つ目のアルゴリズム
akibi = [5,3,4]
buinsu = 3
tantou = 0
for buin in range (1,buinsu):
if akibi[buin] < akibi[tantou]:
tantou = buin
print("次の工芸品の担当は部員",tantou+1,"です")
>>次の工芸品の担当は部員 2 です
これは、三人の部員がいてそれぞれ5日目、3日目、4日目に空きます。この部員の中で誰が最初に暇になって次の工芸品を作ることが出来るかを表しています。
問題ではかなり誘導がついていたのでその通りに素直に従ってpythonのコードにしてみました。しかし、うまくいきませんでした。いろいろなやり方があると思いますが、私は次の点を変更してみました。
tantou = 1 → tantou = 0
for buin in range (2,buinsu+1) → for buin in range (1,buinsu)
print("次の工芸品の担当は部員",tantou,"です") → print("次の工芸品の担当は部員",tantou+1,"です")
インデックスが0なので0にあわせて色々調整しました。
2つ目のアルゴリズム
Nissu = [4,1,3,1,3,4,2,4,3]
kougeihinsu = 9
Akibi = [1,1,1]
buinsu =3
for kougeihin in range(kougeihinsu):
tantou = 0
for buin in range(1,buinsu):
if Akibi[buin] <Akibi[tantou]:
tantou =buin
print("工芸品",kougeihin+1,"…","部員",tantou+1,":",Akibi[tantou],"日目~",Akibi[tantou]
+Nissu[kougeihin]-1,"日目")
Akibi[tantou] = Akibi[tantou] + Nissu[kougeihin]
>>工芸品 1 … 部員 1 : 1 日目~ 4 日目
工芸品 2 … 部員 2 : 1 日目~ 1 日目
工芸品 3 … 部員 3 : 1 日目~ 3 日目
工芸品 4 … 部員 2 : 2 日目~ 2 日目
工芸品 5 … 部員 2 : 3 日目~ 5 日目
工芸品 6 … 部員 3 : 4 日目~ 7 日目
工芸品 7 … 部員 1 : 5 日目~ 6 日目
工芸品 8 … 部員 2 : 6 日目~ 9 日目
工芸品 9 … 部員 1 : 7 日目~ 9 日目
これは先ほどの1でやったものの応用でこちらも3人の部員で効率よく工芸品を作るために担当を振り分けるアルゴリズムです。
こちらは誘導通りに書き換えたら動作はすることが出来ました。が、部員が1と2しかいなくて3がどっかにいってしまいました。したがって、以下の点を修正しました。
tantou = 1 → tantou = 0
for buin in range(2,buinsu) → for buin in range(1,buinsu)
こうすることでリストのインデントの0番目から扱えるように変更することが出来ました。
終わりに🌙
一年前に解いたときはifやforなど知らなかったけれ振り返ってみたらこういう風に使われていたのだと再認識できて面白かった。また、0からスタートだということが大切だと理解できました。
参考
大学入試センターHPより
https://www.dnc.ac.jp/albums/abm.php?d=771&f=abm00005965.pdf&n=2025_op_43_joho1.pdf