function solution(scores) {
let answer = [];
for (let i = 0; i < scores.length; i++) {
let studentScores = [];
let max = -Infinity;
let min = Infinity;
for (let j = 0; j < scores.length; j++) {
const score = scores[j][i];
studentScores.push(score);
if (i !== j && score > max) max = score;
if (i !== j && score < min) min = score;
//자기 자신이 평가한 점수가 유일 최고점이거나 유일 최저점일 때 제거해주기
}
if (studentScores[i] > max || studentScores[i] < min)
studentScores.splice(i, 1);
answer.push(studentScores);
}
//평균값 구하기
answer = answer.map((array) => {
const average =
array.reduce((pre, cur) => pre + cur, 0) / array.length;
if (average >= 90) return "A";
if (average >= 80) return "B";
if (average >= 70) return "C";
if (average >= 50) return "D";
if (average < 50) return "F";
});
return answer.join("");
}
코드설명
- 2차원 배열이라 2중 for문 을 돌면서 해당학생이 받은 점수들을 추출했다
- i(열)을 고정시키고 행을 돌면서 배열을 따로 만들어 주었다
- 자기 자신이 평가한 점수가 유일한 최고점이거나 유일한 최저점일 때 평균에 포함시키면 안되므로
- 최고점과 최저점을 저장해두는데 자기자신이 평가한 경우는 제외해둔다
j 에 대해 for 문을 돌면 한 학생이 받은 점수들에 대해 배열이 만들어지는데
= > studentScores
i 번째 index가 자기자신이 평가한 점수가 된다
= > studentScores[ i ]
studentScores[ i ]가 max 보다 크면 유일한 최고점, min보다 작으면 유일한 최저점이 된다
이 경우 해당 index를 splice해 준 뒤 평균을 구해준다