영어 점수와 수학 점수의 평균 점수를 기준으로 학생들의 등수를 매기려고 합니다. 영어 점수와 수학 점수를 담은 2차원 정수 배열 score
가 주어질 때, 영어 점수와 수학 점수의 평균을 기준으로 매긴 등수를 담은 배열을 return하도록 solution 함수를 완성해주세요.
score
[0], score
[1] ≤ 100score
의 길이 ≤ 10score
의 원소 길이는 2입니다.score
는 중복된 원소를 갖지 않습니다.순위를 보관할 배열을 추가로 만들어서 해당 배열에 순위를 넣었으며, 같은 평균 점수는 공동 등수로 처리해야 한다.
function solution(score) {
// 1. score의 길이와 동일하고, 모든 요소가 1인 배열을 선언한다.
let answer = new Array(score.length).fill(1)
// 2. score 배열의 각 평균 점수를 계산한 배열 avg를 선언한다.
const avg = score.map(e => (e[0]+e[1])/2);
// 3. 이중 for문을 사용, i번째 값보다 큰 j값이 있다면 i의 값에 1을 더한다.
for(let i = 0; i < avg.length; i++){
for(let j = 0; j <avg.length; j++){
if(avg[i]<avg[j]) answer[i]++;
}
}
return answer;
}
등수 매기기는 일반적으로 많이 사용하는 알고리즘이라 다른 사람들의 풀이도 확인해보았다.
function solution(score) {
// 1. score의 평균 점수를 구한다.
let avg = score.map(v=>(v[0]+v[1])/2);
// 2. avg를 내림차순으로 정렬한 배열 sort를 선언한다.
let sorted = avg.slice().sort((a,b)=>b-a);
// 3. avg의 요소와 동일한 sorted 배열의 index 값에 1을 더한다.
return avg.map(v => sorted.indexOf(v) + 1);
}