[アルゴリズム]2 Dナビゲーション-スコアリング



スコア


OX問題とは、正しいか間違っているかの2つの状況の答えがある問題を指す.複数のOX問題からなる試験において、連続して正解した場合、加算点を与えるため、以下の点数計算を行うことにした.1番の問題が正しければ1点です前の質問に対して、答えが間違っていれば、答えが正しい最初の質問は1点に計算されます.また、連続して質問に答えたら、2番目の問題は2点、3番目の問題は3点...K番目の問題はK点で計算します.間違った問題は0点だ.
例えば、下図に示すように、10個のOX問題のうち、答えが正しい問題は1、間違った問題は0、スコア計算は下表のように1+1+2+3+1+2=10となる.
試験問題の採点結果を出すときは、総点を計算するプログラムを作成してください.
■説明の入力
第1行は、問題の個数N(1≦N≦100)を与える.2行目は0または1で、N個の問題の採点結果を表す.0は問題の答えが間違っていることを示し、1は問題の答えが正しいことを示す.
■出力説明
1行目では、入力で与えられたスコア結果について、加算点を考慮した合計スコアを出力します.
■入力例1
10
1 0 1 1 1 0 0 1 1 0
■出力例1
10

説明する

function solution(arr) {
  let count = 0;
  let sum = 0;
  for (x of arr) {
    if (x === 1) {
      count += 1;
      sum += count;
    } else count = 0;
  }
  return sum;
}
for문は使いたくなかったのですが、結局使いました.他に方法が思いつかない...いずれにしても,正解がなければcountを0に初期化する手法を用いて解く.そして,正解があればcount値を1上げsumに蓄積する.

講師の説明

function solution(arr){         
   let answer=0, cnt=0;
   for(let x of arr){
     if(x===1){
       cnt++;
       answer+=cnt;
     }
     else cnt=0;
   }             
   return answer;
}
解けたら同じ接着剤だったのに….

別の解釈

function solution(n, scores) {
  let extraPoint = 0;
  let cnt = 0;
 
  for (let score of scores) {
    score === 1 ? (extraPoint++, (cnt += extraPoint)) : (extraPoint = 0);
  }
 
  return cnt;
}
最初は삼항연산자解答法に近く、1つ目の結果式で2行書く方法が分からなかったのでif문を使用しました.アルゴリズムで問題を解いた後、必ず他の人の問題を見なければならない.どんなに簡単でも、私が解決した問題でも.括弧で囲んで、中に括弧をもう一つ書けばいい!