
내가 작성한 코드
import java.util.Arrays;
public class Solution {
public int[] solution(int[][] score) {
int n = score.length;
int[] ranks = new int[n];
double[] averages = new double[n]; // 학생들의 평균 점수를 저장할 배열
// 각 학생의 평균 계산
for (int i = 0; i < n; i++) {
averages[i] = (score[i][0] + score[i][1]) / 2.0;
}
// 평균 점수를 기준으로 내림차순으로 정렬할 인덱스를 저장할 배열
Integer[] sortedIndexes = new Integer[n]; // Integer[]로 선언해야 정렬이 가능
for (int i = 0; i < n; i++) {
sortedIndexes[i] = i; // 학생의 인덱스를 저장
}
// 평균 점수를 기준으로 내림차순으로 정렬
Arrays.sort(sortedIndexes, (i, j) -> Double.compare(averages[j], averages[i]));
// sortedIndexes 배열을 정렬하는데, 정렬 기준은 averages 배열의 값을 비교해서 내림차순으로 정렬
// 내림차순으로 정렬된 순서대로 등수 매기기
int rank = 1; // 첫 번째 학생의 등수는 1
for (int i = 0; i < n; i++) {
// 이전 학생과 평균 점수가 같으면 같은 등수를 부여
if (i > 0 && averages[sortedIndexes[i]] == averages[sortedIndexes[i - 1]]) {
ranks[sortedIndexes[i]] = ranks[sortedIndexes[i - 1]]; // 같은 점수이면 같은 등수
} else {
ranks[sortedIndexes[i]] = rank; // 점수가 다르면 새로운 등수 부여
}
rank++; // 다음 학생의 등수는 1 증가
}
return ranks; // 학생들의 등수를 반환
}
}다른 사람의 코드
import java.util.*;
class Solution {
public int[] solution(int[][] score) {
List<Integer> scoreList = new ArrayList<>(); // 각 학생의 총합을 담을 리스트
// 총합 담기
for(int[] t : score){
scoreList.add(t[0] + t[1]);
}
// 내림차순 정렬
scoreList.sort(Comparator.reverseOrder());
int[] answer = new int[score.length];
// 순위 매기기
for(int i=0; i<score.length; i++){
answer[i] = scoreList.indexOf(score[i][0] + score[i][1])+1;
}
return answer;
}
}평균이라고 했지만 총합으로만 진행하여도 문제없음
indexOf()를 통해 중복처리 >> 제일 작은 인덱스 값을 반환함
Share article