코딩테스트

[JS] 완전탐색 > 모의고사

차차한 2022. 8. 23. 12:40

function solution(answers) {
    var answer = [];

    var one = [1,2,3,4,5];
    var two = [2,1,2,3,2,4,2,5];
    var three = [3,3,1,1,2,2,4,4,5,5];

    for(var i = 0; i < answers.length; i++){
        one.push(one[i]);
        two.push(two[i]);
        three.push(three[i]);
    }

    var f = one.filter((v,i) => answers[i] === v);
    var s = two.filter((v,i) => answers[i] === two[i]);
    var t = three.filter((v,i) => answers[i] === three[i]);

    var max = Math.max(f.length,s.length,t.length);   

    if(max === f.length){
        answer.push(1);
    }
    if(max === s.length){
        answer.push(2);
    }

    if(max === t.length){
        answer.push(3);
    }

    return answer;
}

변수 one, two, three에 수포자 1,2,3이 찍는 답을 배열에 담아 저장해놨다.

    for(var i = 0; i < answers.length; i++){
        one.push(one[i]);
        two.push(two[i]);
        three.push(three[i]);
    }

이 반복문은 문제의 수에 따라 답안 수도 늘어나야 해서 문제의 길이(answers.length)만큼 반복을 돌려 각각 배열의 값을 계속 더해줬다.

굳이 이 방법을 쓰지 않고 아래의 필터와 같이 한 번에 작성할 수가 있다.

var a1 = answers.filter((a,i)=> a === a1[i%a1.length]).length

위의 코드에서 a1[i%a1.length]를 통해 길이만큼 계속 반복을 할 수가 있다.

답안의 길이로 나눈 나머지를 이용해 인덱스를 설정해 넣으면 된다 -> 1%5=1, 2%5=2, 3%5=3, 4%5=4, 5%5=0, 6%5=1...

아무튼, 필터를 통해 답안과 일치하는 수포자의 답만을 골라내고 그 길이를 찾아 max값을 구해 최다정답자를 찾을 수 있다.