나의 풀이
function solution(answers) {
var answer = []
var scores = [
{ person: 1, score: 0 },
{ person: 2, score: 0 },
{ person: 3, score: 0 }
];
for (i=0; i<answers.length; i++) {
const firstArr = [1,2,3,4,5];
const secondArr = [2,1,2,3,2,4,2,5];
const thirdArr = [3,3,1,1,2,2,4,4,5,5]
if (firstArr[i%5] === answers[i]) {
scores[0].score++;
}
if (secondArr[i%8] === answers[i]) {
scores[1].score++;
}
if (thirdArr[i%10] === answers[i]) {
scores[2].score++;
}
}
scores.sort((a,b)=> b.score-a.score);
if (scores[0].score > scores[1].score) {
answer.push(scores[0].person);
}
else if (scores[1].score > scores[2].score) {
answer.push(scores[0].person);
answer.push(scores[1].person);
}
else {
answer.push(scores[0].person);
answer.push(scores[1].person);
answer.push(scores[2].person);
}
return answer;
}
문제는 크게 두 부분으로 나누어 풀었다. 먼저 세 수포자의 점수를 구하고, 그 후 점수를 이용해서 등수에 따라 배열을 입력하는 부분을 해결했다. 개인적으로 두번째 부분이 더 어려웠다 ^^;
점수를 구하는 부분을 객체의 배열로 나열했기 때문에 scores.sort((a,b)=> b.score-a.score); 를 사용해서 배열을 점수 순으로 정렬할 수 있었고, if문을 사용해서 점수를 고려해서 배열로 리턴할 수 있었다. 효율성테스트가 있는 문제였다면 빼박 fail이지 않았을까 하는 생각을 해본다 ㅎㅎㅎ....
반응형
댓글