수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다.
1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...
1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.
function solution(answers) {
/*
1번 : 순서대로
2번 : 2번먼저 1, 3, 4, 5
3번 : 3 3이 먼저 그 다음에 11 22 44 55
*/
let arr1 = [];
let arr2 = [];
let arr3 = [];
// 1번 수포자
for(let i=0; i<answers.length; i++) {
arr1.push([1, 2, 3, 4, 5]);
}
// 2번 수포자
for(let i=0; i<answers.length; i++) {
arr2.push([2, 1, 2, 3, 2, 4, 2, 5]);
}
// 3번 수포자
for(let i=0; i<answers.length; i++) {
arr3.push([3, 3, 1, 1, 2, 2, 4, 4, 5, 5]);
}
let result1 = [];
let result2 = [];
let result3 = [];
for(let i = 0; i < answers.length; i++) {
if(arr1.flat(Infinity)[i] === answers[i]) {
result1.push(answers[i]);
}
if(arr2.flat(Infinity)[i] === answers[i]) {
result2.push(answers[i]);
}
if(arr3.flat(Infinity)[i] === answers[i]) {
result3.push(answers[i]);
}
}
// 가장 긴거 뽑아내기
let longest = Math.max(result1.length, result2.length, result3.length);
let result = [];
if(result1.length === longest) result.push(1);
if(result2.length === longest) result.push(2);
if(result3.length === longest) result.push(3);
return result;
}
function solution(answers) {
/*
1번 : 순서대로
2번 : 2번먼저 1, 3, 4, 5
3번 : 3 3이 먼저 그 다음에 11 22 44 55
*/
// lookup table
let arr1 = [1, 2, 3, 4, 5];
let arr2 = [2, 1, 2, 3, 2, 4, 2, 5];
let arr3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];
// 5, 8, 10씩 끊어서
let filteredArr1 = answers.filter((el, idx) => el === arr1[idx%5]).length;
let filteredArr2 = answers.filter((el, idx) => el === arr2[idx%8]).length;
let filteredArr3 = answers.filter((el, idx) => el === arr3[idx%10]).length;
let result = [];
let longest = Math.max(filteredArr1, filteredArr2, filteredArr3);
if(longest === filteredArr1) result.push(1);
if(longest === filteredArr2) result.push(2);
if(longest === filteredArr3) result.push(3);
return result;
}