https://programmers.co.kr/learn/courses/30/lessons/42840
// 제한시간 30분
// 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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 함수를 작성해주세요.
// 수포자 1,2,3 번 각각 정해진 패턴으로 문제를 찍는다
// 문제를 많이 맞춘 수포자의 번호를 오름차순으로 리턴한다
// 1,2,3,4,5 => 1,2,3,4,5 반복할 방법은?
// 정답을 맞춘 횟수를 카운트하는 방법은? 객체를 이용?
// 마지막에 각 수포자 카운트 값을 비교해서 가장 높은 사람을 숫자를 리턴...
// 같을 경우 결과를 오름차순 배열 (sort)
// 필요한 변수
// 각 수포자 찍는 패턴
// 각 수포자 정답 횟수
// 1. 정답을 담을 배열 선언
// 2. 찍는 패턴 선언
// 3. 카운트 배열 선언
// 4. 주어진 answers의 배열의 길이만큼 반복을 통해서 카운트
// 5. 첫번째의 카운트를 기준으로 max를 비교
// 6. max와 비교를 통해서 같으면 answer에 푸쉬
// 7. 정답 배열 오름차순 (순서대로 비교하기 때문에 안해줘도 됨)
function solution(answers) {
var answer = [];
var choice = [
[1, 2, 3, 4, 5],
[2, 1, 2, 3, 2, 4, 2, 5],
[3, 3, 1, 1, 2, 2, 4, 4, 5, 5],
];
var count = [0, 0, 0];
for (let i = 0; i < answers.length; i++) {
if (answers[i] === choice[0][i % 5]) count[0]++;
if (answers[i] === choice[1][i % 8]) count[1]++;
if (answers[i] === choice[2][i % 10]) count[2]++;
}
var max = Math.max(...count);
for (let j = 0; j < count.length; j++) {
if (max === count[j]) {
answer.push(j + 1);
}
}
return answer;
}
// 이 문제에서 나에게 중요했던 포인트는 두 가지
// 1. 일정한 패턴으로 반복되는 숫자들을 최대 10000개의 숫자배열과 반복적으로 비교하는 방법
// if (answers[i] === choice[0][i % 5]) count[0]++;
// 2. max값의 설정
// var max = Math.max(...count);
//
// 추가적으로 순서대로 비교했기 때문에 오름차순 정렬이 큰 문제는 아니었지만
// 중간에 꽂혀서 알아봤다
//
// tip
// 숫자 배열
의 오름차순 정렬
// array1.sort(function(a, b) { return a - b });
// 숫자 객체
의 오름차순 정렬
// student.sort(function(a, b) { // 오름차순
// return a[age] - b[age];
// });
//
// 여전히 기초가 부족하다..!
// 익숙해지자! 화이팅!