코딩테스트
[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값을 구해 최다정답자를 찾을 수 있다.