스터디/코딩테스트

javascript 코딩테스트 - 등수 매기기

공대생철이 2023. 3. 3. 15:52
728x90

문제 설명

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


제한사항
  • 0 ≤ score[0], score[1] ≤ 100
  • 1 ≤ score의 길이 ≤ 10
  • score의 원소 길이는 2입니다.
  • score는 중복된 원소를 갖지 않습니다.

입출력 예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]

처음 든 생각

- 등수 배열이랑 점수 배열을 따로 생각해서 등수에 해당하는 애를 점수 배열에서 찾는 방식으로 접근해야겠다.

- 공동 순위가 발생하는 경우에서는 어떻게 처리해야될까

 

나의 답

function solution(score) {
    const answer = []
    const averageArr = score.map(score=>(score[0]+score[1])/2)
    const rankingArr = [...averageArr].sort((a,b)=>b-a)
    for(let n of averageArr){
        answer.push(rankingArr.indexOf(n)+1)
    }
    return answer;
}

먼저 평균 점수들을 나열한 배열을 하나 만들어준다.

그리고 깊은 복사를 해주어서 원래의 평균값 배열에는 변화가 가지 않도록 하고 오름차순으로 정렬한다.

평균 점수 배열에서 점수에 따라 오름차순으로 정렬한 등수 배열에서 인덱스를 추출하여 등수를 결정해준다.

공동 순위가 발생하는 경우에서도 이 논리는 그대로 적용되었다.

 

예를들어, [90,80,80,70,70,55] 이렇게 있으면

80점 학생들은 2등, 70점 학생들은 4등이다.

 

어차피 공동이니깐 배열의 원소의 개수도 같이 늘어나기에 인덱스도 자동으로 밀리게 된다.

그래서 공동 순위에 대한 부분도 처리가 가능하다.

728x90