https://programmers.co.kr/learn/courses/30/lessons/42840
그 모의고사 아닙니다 문제이름이 '모의고사'입니다
function solution(answers) {
const result = [];
const CORRECT = 1;
const WRONG = 0;
// 1번수포자
// 더 간결하게 푸는법?
const rightsN1 = answers.reduce((acc, v, i) => {
const ansIndex = i % 5;
if (ansIndex === 0 && v === 1) {
return acc + CORRECT;
} else if (ansIndex === 1 && v === 2) {
return acc + CORRECT;
} else if (ansIndex === 2 && v === 3) {
return acc + CORRECT;
} else if (ansIndex === 3 && v === 4) {
return acc + CORRECT;
} else if (ansIndex === 4 && v === 5) {
return acc + CORRECT;
} else {
return acc + WRONG;
}
}, 0);
// 2번수포자
const rightsN2 = answers.reduce((acc, v, i) => {
const ansIndex = i % 8;
if (
(ansIndex === 0 || ansIndex === 2 || ansIndex === 4 || ansIndex === 6) &&
v === 2
) {
return acc + CORRECT;
} else if (ansIndex === 1 && v === 1) {
return acc + CORRECT;
} else if (ansIndex === 3 && v === 3) {
return acc + CORRECT;
} else if (ansIndex === 5 && v === 4) {
return acc + CORRECT;
} else if (ansIndex === 7 && v === 5) {
return acc + CORRECT;
} else {
return acc + WRONG;
}
}, 0);
// 3번수포자
const rightsN3 = answers.reduce((acc, v, i) => {
const ansIndex = i % 10;
if ((ansIndex === 0 || ansIndex === 1) && v === 3) {
return acc + CORRECT;
} else if ((ansIndex === 2 || ansIndex === 3) && v === 1) {
return acc + CORRECT;
} else if ((ansIndex === 4 || ansIndex === 5) && v === 2) {
return acc + CORRECT;
} else if ((ansIndex === 6 || ansIndex === 7) && v === 4) {
return acc + CORRECT;
} else if ((ansIndex === 8 || ansIndex === 9) && v === 5) {
return acc + CORRECT;
} else {
return acc + WRONG;
}
}, 0);
// 숫자비교
const scores = [[1,rightsN1], [2,rightsN2], [3,rightsN3]];
const maxScore = Math.max(rightsN1, rightsN2, rightsN3);
scores.forEach((v) => {
if (maxScore === v[1]) {
result.push(v[0]);
}
});
return result;
}
거의 문제 조건을 그대로 조건문으로 만든 후 채점하여 숫자비교한 것
function solution(answers) {
const answer = []
const a1 = [1,2,3,4,5]
const a2 = [2,1,2,3,2,4,2,5]
const a3 = [3,3,1,1,2,2,4,4,5,5]
const a1r = answers.filter((el,i)=> el === a1[i%a1.length]).length
const a2r = answers.filter((el,i)=> el === a2[i%a2.length]).length
const a3r = answers.filter((el,i)=> el === a3[i%a3.length]).length
const max = Math.max(a1r,a2r,a3r)
if(max === a1r){answer.push(1)}
if(max === a2r){answer.push(2)}
if(max === a3r){answer.push(3)}
return answer
}
filter()가 배열을 거른다는 것을 이용해서 마치 문제맞춘걸 거르는 거처럼 보이도록 활용했다. 훨씬 깔끔해보이고 빠르기까지하다ㅋㅋ