[CodeKata] 모의고사

링크

참고

나의 풀이

function solution(answers) {
  let result = [];
  let bestStudent = [];
  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];

  // 답의 갯수만큼, 새로운 배열을 만든 다음 답을 반복하고, 중첩 배열을 제거해서
  // 하나의 배열로 만들고 student에 재할당
  student1 = new Array(answers.length).fill([1, 2, 3, 4, 5]).flat();
  student2 = new Array(answers.length).fill([2, 1, 2, 3, 2, 4, 2, 5]).flat();
  student3 = new Array(answers.length).fill([3, 3, 1, 1, 2, 2, 4, 4, 5, 5]).flat();

  // 학생의 답과 답의 index를 비교해서 같은 것을 리턴
  const correctStudent1 = student1.filter((student, index) => {
    return student === answers[index];
  });

  const correctStudent2 = student2.filter((student, index) => {
    return student === answers[index];
  });

  const correctStudent3 = student3.filter((student, index) => {
    return student === answers[index];
  });

  // 맞은 답의 갯 수를 새 변수에 할당
  const lenStudent1 = correctStudent1.length;
  const lenStudent2 = correctStudent2.length;
  const lenStudent3 = correctStudent3.length;

  // result라는 배열에 학생들의 맞은 답 갯 수를 push
  result.push(lenStudent1, lenStudent2, lenStudent3);
  
  // 학생들의 맞은 답 갯 수와 최대 맞은 갯수를 비교해서 최대 점수를 리턴     
  const bestScores = result.filter((num, index) => {
    return num === Math.max(...result);
  });

  // for loop을 사용해서, result(각 학생이 맞은 갯 수)와 최대 점수가 같으면, index를 bestStudent라는 빈 배열에 push  
  for (let i = 0; i < result.length; i++) {
    if (result[i] === bestScores[0]) {
      bestStudent.push(i + 1);
    }
  }

  // 오름차순으로 정렬
  return bestStudent.sort((a, b) => a - b);
}

... 더 좋은 방법이 없을까...?

좋은 웹페이지 즐겨찾기