function solution(answers) {
let answer = [];
const p1 = [1,2,3,4,5];
const p2 = [2,1,2,3,2,4,2,5];
const p3 = [3,3,1,1,2,2,4,4,5,5];
let p1a = 0;
let p2a = 0;
let p3a = 0;
answers.forEach((a, index) => {
if(a === p1[index%p1.length]) p1a++;
if(a === p2[index%p2.length]) p2a++;
if(a === p3[index%p3.length]) p3a++;
})
let result = [{
key: 1,
value: p1a
}, {
key: 2,
value: p2a
}, {
key: 3,
value: p3a
}]
result.sort((a, b) => {
return b.value - a.value;
});
if(result[0].value === result[1].value && result[1].value !== result[2].value){
answer.push(result[0].key);
answer.push(result[1].key);
}else if(result[0].value === result[1].value && result[1].value === result[2].value){
answer.push(result[0].key);
answer.push(result[1].key);
answer.push(result[2].key);
}else{
answer.push(result[0].key);
}
return answer;
}
정답이긴 하지만, 코드가 너무 길다.
다른 답을 찾아보면서 조금 수정해보았다.
오 답안을 찾아보면서 느낀건데, 내가 작성한 답안의 경우 불필요한 반복은 없다!
때문에 점수를 정렬하고 담는 과정만 수정하면 될 듯 싶다.
function solution(answers) {
let answer = [];
const p1 = [1,2,3,4,5];
const p2 = [2,1,2,3,2,4,2,5];
const p3 = [3,3,1,1,2,2,4,4,5,5];
let p1a = 0;
let p2a = 0;
let p3a = 0;
answers.forEach((a, index) => {
if(a === p1[index%p1.length]) p1a++;
if(a === p2[index%p2.length]) p2a++;
if(a === p3[index%p3.length]) p3a++;
})
const scores = [p1a, p2a, p3a];
const max = Math.max(...scores);
for(let i = 0; i < 3; i ++){
if (max === scores[i]) answer.push(i + 1);
}
return answer;
}
코드 길이는 확실하게 개선됐다.
하지만 성능이 딱히 크게 개선된 것 같진 않다.
brute force
라 그런듯