등수 매기기 [CT]

성배·2025년 1월 30일
0

코딩테스트

목록 보기
40/53

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

생각한 풀이
1. 평균에 대한 등수이니 합으로 하자
2. 점수에 따라 정렬이 아니라 주어진 인덱스 위치에서 등수를 줘야한다
3. 동일한 배열을 만들어 역순 정렬을 하고 해당 값을 원본과 비교해 등수를 주자


import java.util.*;
class Solution {
    public int[] solution(int[][] score) {
        int[] answer = new int[score.length];
        Integer arr[]= new Integer[answer.length];

        for(int i=0;i<score.length;i++){
            arr[i]=score[i][0]+score[i][1];
        }
        
        Integer sum[]= arr.clone();     
        Arrays.sort(sum, Collections.reverseOrder());
        
        for(int i=0;i<answer.length;i++){
            int rank=1;
            for(int j=0;j<answer.length;j++){
                if(arr[i]<sum[j]){
                    rank++;
                }else if(arr[i].equals(sum[j])){
                    rank=rank;
                }
            }
            answer[i]=rank;
        }
        return answer;
    }
}

🐴 풀이
1. answer 배열을 score와 동일하게 크기를 주고 Ineger arr를 생성(역순 정렬을 위해 Integer)
2. arr에 score에 있는 두수의 합을 담는다
3. 두 수의 합을 담은 arr 배열의 복사본을 생성
4. 복사본을 Collections.reverseOrder()를 이용해 역순 정렬
5. for문 내부에서 arr[i]의 값이 역순 정렬한 sum[j]의 값보다 작으면 rank 값을 올린다(등수가 밀린다)
6. arr[i]의 값과 sum[j]의 값이 같으면 rank는 유지
7. for문이 끝날때 해당 rank만 answer에 넣어주고 출력

0개의 댓글