풀이 과정
- 각 학생의 패턴을 배열에 저장
- 시험 답 배열에 대해 반복:
for
- 시험 답과 학생의 답 대조:
%
나머지 연산자 활용
- 점수 배열에 각 학생의 점수 더해나가기:
[[1, 0], [2, 0], [3, 0]]
- 점수 배열에서 가장 큰 값 찾기:
sort()
- 가장 큰 값과 동일한 값의 학생 번호만 남기기:
filter()
, map()
코드
function solution(answers) {
const students = [
[1, 2, 3, 4, 5],
[2, 1, 2, 3, 2, 4, 2, 5],
[3, 3, 1, 1, 2, 2, 4, 4, 5, 5],
];
const scores = [
[1, 0],
[2, 0],
[3, 0],
];
for (let i = 0; i < answers.length; ++i) {
for (let j = 0; j < students.length; ++j) {
if (students[j][i % students[j].length] === answers[i]) {
scores[j][1] += 1;
}
}
}
scores.sort((a, b) => b[1] - a[1]);
const maxScore = scores[0][1];
return scores
.filter((e) => e[1] === maxScore)
.map((e) => e[0])
.sort((a, b) => a - b);
}
🤔
- 다 풀고 보니까 너무 어렵게 푼 거 같은 느낌...
- 다른 사람 풀이 보니까 점수 배열을 굳이 2차원으로 만들 필요가 없고, 나중에 최댓값과 비교하면서 인덱스를 저장하는 배열을 따로 만들면 됐다.
- 학생의 수가 3명 밖에 되지 않으므로 2중 for문도 굳이 쓸 필요가 없었음