第60回【Python】傾斜配点
現在取り組んでいるのは、paiza ラーニング問題集「配列活用メニュー」になります。
はじめに
猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。
Python をゼロから勉強してみよう、のコーナー 60 回目です。
毎朝、昆布茶を飲むようにしてみました。昔は苦手だったのですが、なんだか美味しくいただけています。水溶性食物繊維の一種、フコイダンの響きが気に入っています。効果はまだ実感がない。
それでは、今日も頑張ってみようと思います。
傾斜配点
paiza の入社試験では 科目 1 〜 5 の 5 科目のテストが課せられており、それぞれの科目には重みが設定されています。受験者の得点は各科目の (とった点数) * (科目の重み) となります。 5 科目の得点の合計が最も高かった受験者の得点を求めてください。
N
M_1 M_2 M_3 M_4 M_5
A_{1,1} A_{1,2} A_{1,3} A_{1,4} A_{1,5}
...
A_{N,1} A_{N,2} A_{N,3} A_{N,4} A_{N,5}
・1 行目では、受験者の人数を表す整数 N が与えられます。
・2 行目では、1 〜 5 の各科目の重みを表す整数 M_1 〜 M_5 が半角スペース区切りで与えられます。
・続く N 行のうち i 行目では i 番目の受験者が各科目でとった点数を表す整数 A_{i,1} 〜 A_{i,5} が半角スペース区切りで与えられます。
すべてのテストケースにおいて、以下の条件をみたします。
・1 ≦ N ≦ 100 (1 ≦ i ≦ N)
・0 ≦ A_{i,j}, M_j ≦ 100 (1 ≦ i ≦ N, 1 ≦ j ≦ 5)
5
1 2 3 4 5
1 2 3 4 5
6 7 8 9 0
10 11 12 13 14
10 10 10 10 10
100 2 4 6 48
急に、ちょっと複雑になった。でも、似たようなことは実務でもよく行われている気がする。
Python
N = int(input())
M = [int(x) for x in input().split()]
total = 0
for _ in range(N):
A = [int(x) for x in input().split()]
temp = 0
for i in range(5):
temp += A[i] * M[i]
if temp > total:
total = temp
print(total)
VBA
N = Cells(1, 1)
M = Split(Cells(2, 1), " ")
Total = 0
For i = 0 To N - 1
A = Split(Cells(i + 3, 1), " ")
temp = 0
For j = 0 To 4
temp = temp + (Val(A(j)) * Val(M(j)))
Next
If temp > Total Then Total = temp
Next
Debug.Print Total
最後に
便利だからとやりがちなのが、「最も高かった」を max 関数で処理する方法。これは、if 大なり小なりを使用した方が早いらしい。LeoSaki(旦那)は、結構、max min を使いがちなので、これは覚えておこうと思った。
調べてみると、速度的には、現在の [int(x) for x in input().split()] よりも、list(map(int,input().split())) と書いた方が早い、らしい。なるほどなるほど。速度も意識して書こう。
引き続き、よろしくお願いいたします!
ディスカッション
コメント一覧
まだ、コメントがありません