模擬試験


私の答え

// 테스트 14개 평균속도 -> 1.21 ms
function solution(answers) {
    let players =[
        [1, 2, 3, 4, 5], 
        [2, 1, 2, 3, 2, 4, 2, 5], 
        [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    ]

   let a = players 
   .map((el)=> answers        
        .reduce((ac,cu,i)=> (cu === el[i % el.length]? ac++ : ac ,ac),0)
)
   let score = Math.max(...a)

    return a.reduce((ac,cu,i)=> (cu === score? ac.push(i+1): ac,ac),[])
    
    /*
    맵 메소드로 각 수포자의 정답개수를 배열로 만듭니다. [1의 정답개수, 2의 정답개수, 3의 정답개수]
    (reduce 메소드로 수포자가 문제를 맞힌 개수를 하나로 합쳐서 map 메소드 리턴 값이 되도록 합니다.)
    , 콤마 오퍼레이터는 좌측의 연산이 끝난뒤 ac의 값
    
    가장 높은 점수 -> Math.max() 를 이용해서 구합니다.

    가장 높은 점수를 가진 사람(들)을 오름차순 정렬 해야 하는데
    이미 a는 오름차순 정렬 되어 있는 상태이기 때문에 
    reduce 메소드를 순회 하면서 가장 높은 점수와 같은 인덱스에 1을 더해서 리턴
    */
    
}

他人を解く

// 테스트 14개 평균 속도 -> 1.57 ms
function solution(answers) {
    var answer = [];
    const man1 = [1, 2, 3, 4, 5];
    const man2 = [2, 1, 2, 3, 2, 4, 2, 5];
    const man3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];
    let count = [0, 0, 0];

    for(let i = 0; i < answers.length; i++) {
        if(answers[i] == man1[i % man1.length]) count[0]++;
        if(answers[i] == man2[i % man2.length]) count[1]++;
        if(answers[i] == man3[i % man3.length]) count[2]++;
    }

    const max = Math.max(count[0], count[1], count[2]);
    for(let i = 0; i < count.length; i++) {
        if(max == count[i]) answer.push(i + 1);
    }

    return answer;
    /*

    */
}

問題の説明


「囚人3人組」は模擬試験で数学の問題を全部撮りたいと思っている.
1番捕手の撮り方:1,2,3,4,5,1,2,3,4,5...
2番捕手の撮り方:2、1、2、3、2、4、2、5、2、2、3、2、4、2、5...
3番捕手の撮り方:3,3,1,1,2,2,4,5,5,3,3,1,2,2,4,5,5...
最初の問題から最後の問題までの正解.
順番に聞こえる配列の答えを与えると、
一番多くの問題を当てた人は誰ですか.
ソリューション関数を書いて、配列に戻してください.

せいげんじょうけん


試験には最大10000問が含まれている.
質問の答えは1 2 3 4 5のうちの1つです.
点数が一番高い人が何人かいる場合は、戻った値を昇順に並べてください.

I/O例



I/O例#1
捕手1はすべての質問に答えた.
逮捕者2はすべての問題を間違えた.
逮捕者3はすべての問題を間違えた.
だから一番多くの質問に答えた人は水泡子です.
I/O例#2
誰もが2つの問題に正解した.