🧠 문제 설명
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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하는 값을 오름차순 정렬해주세요.
입출력 예answers return [1,2,3,4,5] [1] [1,3,2,4,2] [1,2,3]
입출력 예 설명
입출력 예 #1
수포자 1은 모든 문제를 맞혔습니다.
수포자 2는 모든 문제를 틀렸습니다.
수포자 3은 모든 문제를 틀렸습니다.
따라서 가장 문제를 많이 맞힌 사람은 수포자 1입니다.
입출력 예 #2
모든 사람이 2문제씩을 맞췄습니다.
세명으로 딱 정해져있어서 세명에 대한 변수를 직접 지정하도록 한다.
(처음엔 저게 무슨규칙인고.. 하고 봤는데 정해진 규칙은 없고 그냥 쟤네는 지네만의 규칙으로 저렇게 찍는거였다.)
총 문제가 담겨있는 매개변수, answers 를 다 돌면서
각 학생이 찍은 수가 answers[i] 번째와 같을때 ,
각 학생이 찍는 배열의 요소가 answers와 제일많이 겹치는 학생을 배열형태로 리턴해주면 된다.
각 학생들은 자신들만의 규칙으로 찍는 방식을 문제수 만큼 계속 반복한다.
예를들어 1,2,3,4,5 의 방식으로 찍고 문제수가 11문제라면
1,2,3,4,5 ,1,2,3,4,5 1
11번째 문제는 1로찍는다는 말이다.
이러한 방식으로 제일 잘찍은 학생 배열형태로 리턴해야 한다.
만약 찍은수가 똑같이 맞았다면 오름차순으로 리턴하면 된다.
function solution(answers) {
let answer = [];
//answers = [1,3,2,4,2]
//수포자 3인방(이숙영포함)
//answers.length 도달할때까지 각 수포자들은
let student1 = [1,2,3,4,5];
let student2 = [2,1,2,3,2,4,2,5];
let student3 = [3,3,1,1,2,2,4,4,5,5];
let countArr = [0, 0, 0];
//answers 만큼 돌고 i 번째가 student1,2,3[i] 번째 요소와 같으면
//countArr[0,1,2] 번 각각 1 씩 카운트
for(let i = 0; i < answers.length; i++){
if(answers[i] === student1[i % student1.length]){
countArr[0]++;
}
if(answers[i] === student2[i % student2.length]){
countArr[1]++;
}
if(answers[i] === student3[i % student3.length]){
countArr[2]++;
}
}
const max = Math.max(...countArr);
for(let i = 0; i < countArr.length; i++){
if(countArr[i] === max){ //동점자가 있을 경우, 오름차순으로 정렬
answer.push(i + 1);
}
}
return answer;
}