
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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 함수를 작성해주세요.
∙ 시험은 최대 10,000 문제로 구성되어있습니다.
∙ 문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
∙ 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.
1, 2, 3번의 선택 패턴이 나타나 있고 주어진 정답과 얼마나 일치하는지
확인한 다음, 가장 정답률이 높은 사람의 번호를 추출해야 한다. 경우에 따라 여러명이 최다정답자일 수 있다.

입출력 예 설명
입출력 예 #1
∙ 수포자 1은 모든 문제를 맞혔습니다.
∙ 수포자 2는 모든 문제를 틀렸습니다.
∙ 수포자 3은 모든 문제를 틀렸습니다.
따라서 가장 문제를 많이 맞힌 사람은 수포자 1입니다.
입출력 예 #2
∙ 모든 사람이 2문제씩을 맞췄습니다.
function solution(answers) {
let group = [[1,2,3,4,5],[2,1,2,3,2,4,2,5],[3,3,1,1,2,2,4,4,5,5]];
let final = [];
let count = Array(group.length).fill(0);
for(let i = 0 ; i<group.length; i++){
for(let j = 0; j< answers.length ; j++){
if( answers[j] === group[i][ j % group[i].length ] ){
count[i]++;
}
}
}
for(let i = 0 ; i < count.length ; i++){
if(count[i] === Math.max(...count)){
final.push(i+1)
}
}
return final;
}
1) group 배열 안에 1, 2, 3번의 찍는 최소 패턴을 저장. count 배열엔 맞은 문제의 수를 저장.
2) 이중반복문으로 들어가서 각 학생의 맞은 문제수를 체크한다. 나머지 연산자 '%'는 answers가 5개 이상 주어질 때 맞은 문제를 체크하기 위한 역할을 한다. 어려운 내용은 아니었으나 이 부분에서 마무리에 조금 딜레이가 있었다.
3) count의 배열 원소들과 최대값을 비교해서 일치하는 인덱스에 1을 더한다. 학생의 순서는 1번부터 시작하기 때문이다.