문제
내가 작성한 오답
: 평균값을 구할 때 소수점 아래의 수가 나올 수도 있는데 int 배열에 저장을 했다.
import java.util.*;
class Solution {
public int[] solution(int[][] score) {
Map<Integer,Integer> map = new HashMap<>();
Integer[] sorted = new Integer[score.length];
int[] rank = new int[score.length];
for(int i=0; i < score.length; i++){
rank[i] = ( score[i][0]+score[i][1])/2;
sorted[i] = ( score[i][0]+score[i][1])/2;
}
Arrays.sort(sorted,Collections.reverseOrder());
for(int i = 0; i<score.length; i++){
if(i>0 && sorted[i].equals(sorted[i-1])){
map.put(sorted[i],map.get(sorted[i-1]));
}else{
map.put(sorted[i],i+1);
}
}
for(int i = 0; i<score.length; i++){
rank[i] = map.get(rank[i]);
}
return rank;
}
}
내가 작성한 정답
: int[] → Double[]로 변경하고 2로 나누지 않고 2.0으로 나눴다.
import java.util.*;
class Solution {
public int[] solution(int[][] score) {
Map<Double, Integer> map = new HashMap<>();
Double[] sorted = new Double[score.length];
Double[] rank = new Double[score.length];
for(int i=0; i < score.length; i++){
rank[i] = (score[i][0]+score[i][1])/2.0;
sorted[i] = (score[i][0]+score[i][1])/2.0;
}
Arrays.sort(sorted,Collections.reverseOrder());
for(int i = 0; i<score.length; i++){
if(i > 0 && sorted[i].equals(sorted[i-1])){
map.put(sorted[i],map.get(sorted[i-1]));
}else{
map.put(sorted[i],i+1);
}
}
int[] answer = new int[score.length];
for(int i = 0; i<score.length; i++){
answer[i] = map.get(rank[i]);
}
return answer;
}
}
다른 사람들의 정답
: 순위 구할거라 평균을 구할 필요없이 그냥 더한값으로 순위를 매기면 된다.
import java.util.*;
class Solution {
public int[] solution(int[][] score) {
List<Integer> scoreList = new ArrayList<>();
// 2차원 배열 score를 순회하며 각 학생의 총 점수(영어 + 수학)를 리스트에 추가
for(int[] t : score){
scoreList.add(t[0] + t[1]);
}
// 총 점수를 내림차순으로 정렬
scoreList.sort(Comparator.reverseOrder());
// 결과 배열 초기화
int[] answer = new int[score.length];
// 각 학생의 순위를 계산하여 answer 배열에 저장
for(int i = 0; i < score.length; i++){
// 현재 학생의 총 점수의 인덱스를 찾아 순위를 계산
// indexOf는 리스트에서 해당 점수의 첫 번째 인덱스를 반환하므로 +1을 해줌
answer[i] = scoreList.indexOf(score[i][0] + score[i][1]) + 1;
}
return answer;
}
}
import java.util.Arrays;
import java.util.Comparator;
import java.util.stream.Collectors;
class Solution {
public int[] solution(int[][] score) {
return Arrays.stream(score) // score 배열을 스트림으로 변환
.map(ints -> Arrays.stream(ints) // 각 학생의 점수를 스트림으로 변환
.average() // 평균을 계산
.orElse(0)) // 평균이 없을 경우 0을 반환
.mapToInt(d -> Arrays.stream(score) // 다시 score 배열을 스트림으로 변환
.map(ints -> Arrays.stream(ints) // 각 학생의 점수를 스트림으로 변환
.average() // 평균을 계산
.orElse(0)) // 평균이 없을 경우 0을 반환
.sorted(Comparator.reverseOrder()) // 평균 점수를 내림차순으로 정렬
.collect(Collectors.toList()) // 정렬된 평균 점수를 리스트로 수집
.indexOf(d) + 1) // 현재 학생의 평균 점수 d의 인덱스를 찾아 순위를 계산 (+1)
.toArray(); // 최종 결과를 int 배열로 변환하여 반환
}
}

Share article