https://programmers.co.kr/learn/courses/30/lessons/83201
function solution(scores) {
let answer = '';
let length = scores.length
for(let i = 0; i < length; i++){
let arr = [];
let max = 0;
let min = 100;
for(let j = 0; j < length; j++){
arr.push(scores[j][i]); // 이렇게 해야 arr에 '한 열'의 점수가 모인다.
if(scores[j][i] > max) max = scores[j][i];
if(scores[j][i] < min) min = scores[j][i];
}
if(scores[i][i] === max || scores[i][i] === min) arr.splice(i, 1);
let mean = arr.reduce((a, b) => a + b, 0) / arr.length; // 배열의 누적합/배열의 길이 = 평균
if(mean >= 90) answer+="A";
else if(mean >= 80 && mean < 90) answer+="B";
else if(mean >= 70 && mean < 80) answer+="C";
else if(mean >= 60 && mean < 70) answer+="D";
else answer+="F";
}
return answer;
}
테스트 21개중에 5개는 통과하지 못 했는데, 이유를 곰곰히 생각해보니 문제 조건 중에서 점수를 제외하는 경우는 점수가 유일한 최고점 또는 유일한 최저점일 때라고 했는데 그 부분을 고려하지 못 했다.
function solution(scores) {
let answer = '';
let length = scores.length
for(let i = 0; i < length; i++){
let arr = [];
let max = 0;
let min = 100;
for(let j = 0; j < length; j++){
arr.push(scores[j][i]);
if(scores[j][i] > max) max = scores[j][i];
if(scores[j][i] < min) min = scores[j][i];
}
let countMax = arr.filter(element => max === element).length;
let countMin = arr.filter(element => min === element).length;
if(scores[i][i] === max && countMax === 1) arr.splice(i, 1);
else if(scores[i][i] === min && countMin === 1) arr.splice(i, 1);
let mean = arr.reduce((a, b) => a + b, 0) / arr.length;
if(mean >= 90) answer+="A";
else if(mean >= 80 && mean < 90) answer+="B";
else if(mean >= 70 && mean < 80) answer+="C";
else if(mean >= 50 && mean < 70) answer+="D";
else answer+="F";
}
return answer;
}
유일한 최고점 또는 유일한 최저점일 경우를 어떻게 표현해야할지 혼자서 고민도 해보고 구글링도 해본 결과, filter와 length를 결합해서 arr의 최대값의 개수와 최소값의 개수를 변수 countMax와 countMin에 할당해서 문제를 해결했다.