第60回【JavaScript】傾斜配点

現在取り組んでいるのは、paiza ラーニング問題集「配列活用メニュー」になります。

はじめに

猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。

JavaScript をゼロから勉強してみよう、のコーナー 60 回目です。

IT の業界に入ってから、どんなに忙しくても、毎日少しでも勉強する、という自分で決めたルールを頑なに守り続けて何年になりますか。面接のときに、勉強を続けないとついていけなくなりますよ、と伝えるようにしています。まぁ、ほとんどの人はやります、頑張ります、と答えますが、なかには勉強は嫌です、と答える人がいたりもします。

それでは、今日も頑張ってみようと思います。

傾斜配点 (paizaランク C 相当)

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つ入ります。


期待する出力

S

5 科目の得点の合計が最も高かった受験者の得点 S を 1 行で出力してください。

また、末尾に改行を入れ、余計な文字、空行を含んではいけません。


すべてのテストケースにおいて、以下の条件をみたします。

・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

出力例

380

急なレベルアップに戸惑っています。

JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');

var lines = [];
var reader = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});
reader.on('line', (line) => {
  lines.push(line);
});
reader.on('close', () => {
  const n = Number(lines[0]);
  const M = lines[1].split(/\s/).map(Number);
  let total = 0;
  for (let i = 2; i < n+2; i++) {
      const A = lines[i].split(/\s/).map(Number);
      let temp = 0;
      for (let j = 0; j < 5; j++) {
          temp += A[j] * M[j];
      }
      if (temp > total) total = temp;
  }
  console.log(total);
});
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)

最後に

map を利用して、もう少し簡潔に書くことが出来ないか試行錯誤していました。なんとか書くには書けたのですが、完全に理解出来ているわけではないので学習継続の方向です。

やってみて正解だった、でも、内容を理解していなければ意味がない気がしています。ちゃんと理解して納得するまでは、面倒でも学習を続ける必要があると考えている今日この頃。

引き続き、よろしくお願いいたします!

Python の第60回はこちら