상호평가 방식으로 점수를 매기는데
자기 자신에게 준 점수가 받은 점수 중 유일한 최고점/최저점이면 제외하고 평균을 계산한다.
학생별로 받은 점수를 쉽게 계산할 수 있도록 배열을 뒤집는다.
(뭐.. i번 학생의 점수를 score[0~n][i]로 해도 되긴 하지만..)
그리고
1) 점수가 제외되지 않는 경우 그냥 총합/인원수를 구하면 된다.
2) 점수가 제외되는 경우 (총합-내가 준 점수)/인원수-1 하면 된다.
function solution(scores) {
var answer = '';
const s = [];
// 학생별 점수가 될 수 있도록 배열 뒤집기
for(let i in scores){
for(let j in scores[i]){
if(!s[j]) s.push([])
s[j].push(scores[i][j])
}
}
const av = [];
for(let i in s){
// 자기 점수와 최고점/최저점이 같고 최고점/최저점의 갯수가 1개면 제외해야 함
let sum = 0;
let members = s.length;
if(Math.max(...s[i]) == s[i][i] && s[i].filter(sc=> sc==s[i][i]).length == 1) {
// console.log(i, '학생은 유일한 최고점');
sum -= s[i][i];
members--;
} else if(Math.min(...s[i]) == s[i][i] && s[i].filter(sc=> sc==s[i][i]).length == 1) {
// console.log(i, '학생은 유일한 최저점')
sum -= s[i][i];
members--;
}
const result = s[i].reduce((acc, cur) => {
return acc += cur;
}, sum);
av.push(result/members);
}
// console.log('평균',av);
for(let i in av){
answer += getGrade(av[i])
}
return answer;
}
function getGrade(score){
if(score>=90){
return 'A';
}else if(score>=80){
return 'B';
} else if(score>=70){
return 'C';
} else if(score>=50){
return 'D';
} else {
return 'F';
}
}
풀어보러 가기 : https://programmers.co.kr/learn/courses/30/lessons/83201
'Web development > Algorithm' 카테고리의 다른 글
[프로그래머스] 직업군 추천하기 (javascript) (0) | 2021.08.23 |
---|---|
[프로그래머스] 기능개발 (javascript) (0) | 2021.08.20 |
[프로그래머스] 부족한 금액 계산하기 (javascript) (0) | 2021.08.20 |
[LeetCode] 55. Jump Game (javascript) (0) | 2021.08.20 |
[프로그래머스] N으로 표현 (0) | 2021.08.12 |
댓글