Javascript - 등수 매기기

이율곡·2023년 7월 12일

Programmers

목록 보기
29/44
post-thumbnail

등수 매기기

문제

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

입출력 예

scoreresult
[[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]

접근방법

이 문제의 핵심은 주어진 점수를 기반으로 학생들의 평균 점수를 계산하고, 그 결과를 기반으로 등수를 매기는 것이다. 이를 토대로 접근하면,

  1. 학생의 평균 점수를 계산.
  2. 평균 점수를 기반으로 등수를 매김.
  3. 자신의 평균 점수보다 높은 평균 점수를 가진 학생의 수를 세기. 이 수에 1을 더하면 해당 학생의 등수가 됨.

풀이

function solution(score) {
    let avgScores = score.map(s => (s[0] + s[1]) / 2);
    let ranks = avgScores.map((s, i) => 1 + avgScores.filter((ss, ii) => ss > s && ii !== i).length);
    return ranks;
}

풀이를 해석하면 다음과 같다. 우선 avgScores 변수는 각 학생의 평균 점수를 담고 있는 배열이고, ranks는 이 변수를 통해 등수를 매긴 배열이다.

여기서 avgScores.filter((ss, ii) => ss > s && ii !== i).length 이 부분이 복잡한데 해석을 하면, 자신의 평균 점수보다 높은 점수를 가진 학생의 수를 세는 것이다. 그리고 이 수에 1을 더하면 해당 학생의 등수가 된다.


정리하기

map과 filter를 사용하여 푼 문제다. 이 메서드를 이해하고 있으면 크게 어렵지 않은 문제였다. 그래도 계속 응용하는 문제를 풀면서 조금씩 성장할 수 있어 기쁘다.

profile
음악을 좋아하는 사람이 음악을 만들 듯, 개발을 좋아하게 될 사람이 쓰는 개발이야기

1개의 댓글

comment-user-thumbnail
2023년 7월 12일

율곡이가 1등해~

답글 달기