https://programmers.co.kr/learn/courses/30/lessons/42840
// 1번 : 1~5 반복
// 2번 : 2한번 1,3,4,5 한번씩
// 3번 : 33 11 22 44 55 33 11 22 44 55
function solution(answers) {
let p1 = [1,2,3,4,5];
let p2 = [2,1,2,3,2,4,2,5];
let p3 = [3,3,1,1,2,2,4,4,5,5];
let result1 = answers.filter((x,i)=> x == p1[i%p1.length]).length;
let result2 = answers.filter((x,i) => x == p2[i%p2.length]).length;
let result3 = answers.filter((x,i) => x == p3[i%p3.length]).length;
let answer = [];
let max = Math.max(result1, result2, result3);
if (result1 == max) answer.push(1);
if (result2 == max) answer.push(2);
if (result3 == max) answer.push(3);
return answer;
}
일정한 규칙을 가진 정답지(배열)을 돌면서 정답을 비교해 가장 큰 값을 뽑아낸다.
처음엔 일정한 규칙을 가지는 새로운 배열을 for문을 통해 만들었었다.
ex) 초기 p1
let j = 0;
for (var i = 1; i <= answers.length; i++) {
i % 5 == 0 ? j = 5 : j = i % 5
p1.push(j);
}
근데 굳이 이럴 필요없이 규칙만큼의 배열을 만들어서 해당 인덱스를 돌게 만들면 될 거 같았다.
let result1 = answers.filter((x,i)=> x == p1[i%p1.length]).length;
let result2 = answers.filter((x,i) => x == p2[i%p2.length]).length;
let result3 = answers.filter((x,i) => x == p3[i%p3.length]).length;
i%p1.length가 규칙을 한바퀴 다도는거니까 answer와 일치하는 만큼의 길이를 저장.