https://school.programmers.co.kr/learn/courses/30/lessons/120882
영어 점수와 수학 점수의 평균 점수를 기준으로 학생들의 등수를 매기려고 합니다. 영어 점수와 수학 점수를 담은 2차원 정수 배열 score
가 주어질 때, 영어 점수와 수학 점수의 평균을 기준으로 매긴 등수를 담은 배열을 return하도록 solution 함수를 완성해주세요.
0 ≤ score[0], score[1] ≤ 100
1 ≤ score의 길이 ≤ 10
score의 원소 길이는 2입니다.
score는 중복된 원소를 갖지 않습니다.
score | result |
---|---|
[[80, 70], [90, 50], [40, 70], [50, 80]] | [1, 2, 4, 3] |
[[80, 70], [70, 80], [30, 50], [90, 100], [100, 90], [100, 100], [10, 30]] | [4, 4, 6, 2, 2, 1, 7] |
평균은 각각 75, 70, 55, 65 이므로 등수를 매겨 [1, 2, 4, 3]을 return합니다.
평균은 각각 75, 75, 40, 95, 95, 100, 20 이므로 [4, 4, 6, 2, 2, 1, 7] 을 return합니다. 공동 2등이 두 명, 공동 4등이 2명 이므로 3등과 5등은 없습니다.
class Solution {
public int[] solution(int[][] score) {
int[] answer = new int[score.length];
double[] avg=new double[score.length];
boolean isSame=false;
for(int i=0;i<score.length;i++){
avg[i]=(double)(score[i][0]+score[i][1])/2;
}
int rank=1;
int same=0;
for(int i=0;i<avg.length;i++){
for(int j=0;j<avg.length;j++){
if(avg[j]==avg[i] && i==j){
continue;
}
else if(avg[j]==avg[i] && i!=j){
same++;
isSame=true;
}
else if(avg[i]<avg[j]){
rank++;
}
}
if(isSame){
for(int k=0;k<i;k++){
if(answer[k]==rank+1){ //동등순위인데 바로 다음 순위가 있다면
answer[k]+=same;
}
}
isSame=false;
}
same=0;
answer[i]=rank;
rank=1;
}
return answer;
}
}
일부러 double로 줬었는데
avg[i]=(double)(score[i][0]+score[i][1])/2;
이 부분에서 제대로 double
로 안받아와져서 앞에 명시적 형변환을 해줬다.
만약 자신보다 큰 수가 있으면 자신의 rank
를 1씩 올렸다.
만약 자기 자신이 아닌데, 자신이랑 같은 수가 있으면 공동 등수가 되므로
자기 자신 다음의 등수에 공동 등수 수 만큼 더해준다.