[JavaScript | 프로그래머스] 등수 매기기

고은비·2023년 4월 20일
0

Algorithm

목록 보기
5/9

💡 영어 점수와 수학 점수의 평균 점수를 기준으로 학생들의 등수를 매기려고 합니다. 영어 점수와 수학 점수를 담은 2차원 정수 배열 score 가 주어질 때, 영어 점수와 수학 점수의 평균을 기준으로 매긴 등수를 담은 배열을 return하도록 solution 함수를 완성해주세요.

입출력 예시

beforeresult
[[80, 70], [90, 50], [40, 70], [50, 80]][1, 2, 4, 3]
[[80, 70], [70, 80], [30, 50], [90, 100], [100, 90], [100, 100], [10, 30]][4, 4, 6, 2, 2, 1, 7]

Solution

function solution(score) {
    const rank = new Array(score.length).fill(1);
    const average = score.map((i) => (i[0] + i[1]) / 2);
    for (let i = 0; i < average.length; i++) {
        for (let j = 0; j < average.length; j++) {
            if (average[j] > average[i]) rank[i]++;
        }
    }
    return rank;
}

해결과정

새로운 배열 rank를 생성, fill 함수 사용해서 모든 요소를 1로 초기화하고, map을 이용해 영어 점수와 수학 점수의 평균을 구함.

 const rank = new Array(score.length).fill(1); // [1,1,1,1]
 const average = score.map((i) => (i[0] + i[1]) / 2); 

이중 반복문을 사용. 점수가 더 낮은 학생의 등수를 1씩 증가.

for (let i = 0; i < average.length; i++) {
        for (let j = 0; j < average.length; j++) {
            if (average[j] > average[i]) rank[i]++;
        }
    }
    return rank;

다른 사람의 풀이

avg 배열의 각 요소에 대해서 sorted 배열에서 몇번째인지 찾아서 반환.

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);
}

0개의 댓글

관련 채용 정보