[프로그래머스, 120882] 등수 매기기 (java)
Problem Solving/Programmers

[프로그래머스, 120882] 등수 매기기 (java)

728x90

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


메모리: 87.8 MB, 시간: 0.76 ms

사용 알고리즘: 정렬

import java.util.*;

class Solution {
    public int[] solution(int[][] score) {
        
        // (영어 점수 + 수학 점수)와 학생 번호를 담은 배열
        int[][] arr = new int[score.length][2];
        for(int i = 0; i < score.length; i++) {
            arr[i][0] = score[i][0] + score[i][1];
            arr[i][1] = i;
        }
        
        // 점수를 기준으로 내림차순 정렬
        Arrays.sort(arr, (o1, o2) -> o2[0] - o1[0]);
        
        // 등수 매기기
        int ranking = 1;
        int same = 0;
        
        int[] answer = new int[score.length];
        answer[arr[0][1]] = ranking;
        
        for(int i = 1; i < score.length; i++) {
            if(arr[i - 1][0] != arr[i][0]) { // 이전 사람과 점수가 다르다면
                ranking += same + 1;
                same = 0;
            }
            else // 이전 사람과 점수가 같다면 
                same ++;
            
            answer[arr[i][1]] = ranking;
        }
        
        return answer;
    }
}
728x90