[JAVA 문제 풀이] 81. 등수 매기기

프로그래머스 (120882)
Stupefyee's avatar
Feb 11, 2025
[JAVA 문제 풀이] 81. 등수 매기기
notion image

내가 작성한 코드

💡
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

stupefyee