문제
영어와 수학 점수를 담은 2차원 정수 배열 score가 주어 질때, 두 점수의 평균을 기준으로
매긴 등수를 담은 배열을 return 하세요
예시
score : [[80, 70], [70, 80], [30, 50], [90, 100], [100, 90], [100, 100], [10, 30]]
answer : [4, 4, 6, 2, 2, 1, 7]
위의 예시와 같이 공동 2등이 2명일 경우 다음 등수는 4등이라는 것이다. 평소에는 점수를 오름차순으로 정렬하는 함수 sort를 썼지만 이 문제는 다른 방법으로 접근해야 한다.
function solution(score) {
const answer = new Array(score.length).fill(1);
const avg = score.map(e => (e[0] + e[1] )/2);
//모든 avg를 모든 avg와 비교한다.
//두 수를 비교해서 더 작은 수의 값에 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){
return score.map(e => {
return (
score.filter(v=> (v[0]+ v[1]) / 2 > (el[0] + el[1] /2 ).length + 1
);
});
}
이 풀이의 경우 map을 사용해서 새로운 배열을 반환했다.
반환한 값의 경우 score를 filter하여 자신(평균)보다 큰 평균의 개수를 반환하였다. 시작은 1등부터이므로 1을 더했다.
앞 풀이와 푸는 방법은 유사하다.