アルゴリズム-シミュレーション試験(フルナビゲーション)


プログラマ-模擬試験(完全ナビゲーション)
長い間頭を働かすためにアルゴリズムを解いた
今日解決した問題は第1段階の模擬試験です.
正直、これは良い学習問題だとは思いません.ハードコーディングに似ています.

説明する

function solution(answers) {
    const answer = [];
    
    // 찍는 방식을 기록한 객체로, 이 부분은 하드코딩 필수적이다.
    const people = {
        1: [1, 2, 3, 4, 5],
        2: [2, 1, 2, 3, 2, 4, 2, 5],
        3: [3, 3, 1, 1, 2, 2, 4, 4, 5, 5],
    }
    
    // 누가 몇 문제를 맞췄는지를 기록하는 객체를 만들었다.
    const corret = {
        1: 0,
        2: 0,
        3: 0,
    }
    
    // 2중 for문을 돌려서 퍼포먼스적으로는 좋지 않지만, 만약 사람이 추가 되었을때 위의 두 객체에 값들만 추가하면 된다.
    for (const person in people) {
        answers.forEach((answer, index) => {
          // index % people[person].length는 만약 찍는 방식(배열)의 길이를 넘어가면 다시 찍는방식을 처음부터 탐색하게 하기위해 저렇게 코딩했다.
            if(answer === people[person][index % people[person].length]) {
                corret[person]++;
            }
        })
    }
    
  // 가장 높은 점수를 찾는다.
    const maxValue = Math.max(...Object.values(corret));
    
  // 가장 높은점수를 받은 사람을 answer 배열에 집어넣는다.
    for (const key in corret) {
        if (corret[key] === maxValue) {
            answer.push(parseInt(key))
        }
    }
    
    return answer;
}