본문 바로가기
기초다지기/JS 코딩테스트

javascript 2차원 배열 평균 순위 매기기

by 김빵그 2023. 11. 2.

문제

[영어점수, 수학점수] 평균점수를 기준으로 학생들의 등수를 매겨라

나의 풀이 

function solution(score) {
    const n = score.length;
    const averages = new Array(n).fill(1);
    var arr = [];

    for(let [num1, num2] of score) {
        arr.push((num1 + num2) / 2) 
     }
    console.log(arr);
    for(let i = 0; i < n; i ++) {
        for (let j = 0; j < n; j++) {
          if (i !== j && arr[i] < arr[j]) {
            averages[i]++;
          }
        }
    }
    return averages
    
}
  • n : 학생수
  • averages : 학생수와 동일한 길이로 생성되며 모든 학생의 순위를 1로 초기화 한다
  • arr : 평균을 저장할 배열 
  • for of를 사용하여 scrore 배열을 반복해 두 과목 점수 num1, num2를 가져와 평균을 계산하고 arr 배열에 추가한다
  • 중첩된 for 루프를 사용하여 학생들 간의 평균 점수를 비교하고 높은 점수를 가진 학생에게 순위를 부여한다
  • 만약 학생 i의 평균점수 arr[i]와 arr[j] 평균점수 보다 작으면 averages[i]에 1증가

다른 풀이 

1) map.. filter

function solution(score) {
  return score.map((el) => {
    return (
      score.filter((v) => (v[0] + v[1]) / 2 > (el[0] + el[1]) / 2).length + 1
    );
  });
}
  • scroe 배열의 각 학생에 대해 아래의 동작을 수행한다 
  • el는 현재 순회중인 학생
  • filter를 사용하여 평균 점수를 비교하는 조건을 만족하는 학생들의 배열을 필터링한다 현재 학생 el 보다 평균 점수가 높은 학생 수를 계산 + 1

2) slice

function solution(score) {
    let avg = score.map(v=>(v[0]+v[1])/2);
    let sorted = avg.slice().sort((a,b)=>b-a);
    return avg.map(v=>sorted.indexOf(v)+1);
}
  • avg 배열은 학생들의 평균 점수 배열 
  • sorted  배열은 평균 점수를 복사한후 내림차순으로 정렬한 배열        
  • map 함수를 사용하여 sorted.indexOf(v)  평균점수 v가 sorted 배ㅕㅇㄹ에서 어느 위치게 있는지 찾아 v 순위를 계산한다

3) for of

function solution(score) {
    const answer = [];
    for (const [a, b] of score) {
        const ab = (a + b) / 2;
        let cnt = 1;
        for (const [aa, bb] of score) {
            const aabb = (aa + bb) / 2;
            if (aabb > ab) cnt++;
        }
        answer.push(cnt);
    }
    return answer;
}