등수 매기기, Javascript

cptkuk91·2023년 2월 16일
1

Algorithm

목록 보기
137/161

문제

https://school.programmers.co.kr/learn/courses/30/lessons/120882

코드

function solution(score) {
    let result = [];
    
    let tmp = [];
    
    for(let i = 0; i < score.length; i++){
        tmp.push((score[i][0] + score[i][1]) / 2);
    }
    
    let sortedArr = [...tmp].sort((a, b) => b - a);
    for(let i of tmp){
        // 현재 rank(i)의 경우 다시 0부터 시작한다. 순위는 1부터 시작하기 때문에 +1을 더해준다.
        
        // indexOf를 사용한 이유는 우선 값을 구한 후 sort된 값을 바탕으로, 비교하면서 위치를 찾는 방법을 통해 문제를 해결했다.
        let rank = sortedArr.indexOf(i) + 1;
        result.push(rank);
    }
    
    return result;
}

풀이

우선 score에 들어 있는 평균값을 구해야 한다. 따라서 반복문을 통해 score[i]에 접근하고 첫 값[0]과 [1] 값을 더한 후 나눠 구할 수 있었다.
높은 숫자가 1등이기 때문에 sort((a, b) => b - a)를 통해 정렬하였고 주의 사항으로 spread Operator를 사용해야만한다. 새로운 배열을 만들 것이기 때문이다. 따라서 [...tmp]를 통해 tmp 배열을 복사 후 sortedArr에 넣어줬다. 마지막으로 tmp에 있는 각 값을 sortedArr에서 찾아야 한다. 이때 sortedArr(i)만 적용할 경우 첫 값은 0이 된다. 하지만 우리는 0위를 구하는 게 아니라 1위부터 구해야하기 때문에 +1 을 해줬고 result배열에 결과값을 넣은 후 원하는 값을 찾을 수 있다.

profile
메일은 매일 확인하고 있습니다. 궁금하신 부분이나 틀린 부분에 대한 지적사항이 있으시다면 언제든 편하게 연락 부탁드려요 :)

0개의 댓글