첫 코드
class Solution {
public int[] solution(int[][] score) {
int[] answer = new int[score.length];
Integer[] sorted = new Integer[score.length];
List<Integer> average = new ArrayList<>();
int before = -1;
int before_index = -1;
for (int i = 0 ; i < score.length ; i++){
sorted[i] = ( score[i][1] + score[i][0] );
average.add(sorted[i]);
}
Arrays.sort(sorted, Collections.reverseOrder());
for (int i = 0 ; i < score.length ; i++){
answer[average.indexOf(sorted[i])] = i+1;
if (before == sorted[i]){
answer[average.indexOf(sorted[i])] = answer[before_index];
}
before = sorted[i];
before_index = average.indexOf(sorted[i]);
average.remove(before_index);
average.add(before_index,0);
}
return answer;
}
}
등수를 저장하는 int[] answer
평균을 저장하는 List average
평균을 저장하고 순서대로 정렬하는 int[] sorted
sorted[] 를 정렬한 후에 그 값을 average에 찾아서 그 index를 받아 answer에 index +1 로 등수를 매긴다.
이 때 !!! 가장 문제는 average 값이 같을 때이다.
그래서 그 전 단계의 값과 전 단계의 index를 befor, before_index에 저장한다.
그리고 indexOf를 사용할 때 가장 먼저의 index가 나오므로
average.remove 와 average.add를 이용해 average List에서 그 전 값을 0으로 바꿔준다.
실로 개같은 코드다 ...
수정 코드
class Solution {
public int[] solution(int[][] score) {
int[] answer = new int[score.length];
List<Integer> sorted_average = new ArrayList<>();
for (int i = 0 ; i < score.length ; i++){
sorted_average.add( score[i][1] + score[i][0] );
}
sorted_average.sort(Comparator.reverseOrder());
for (int i = 0 ; i < score.length ; i++){
answer[i] = sorted_average.indexOf(score[i][0] + score[i][1]) + 1;
}
return answer;
}
}
첫 코드와의 차이점은 점수가 같은 경우 중복을 제거하는 부분이 사라졌다는 것이다.
평균을 정리해놓은 list에서 indexOf를 사용하면 점수가 같더라도 어차피 가장 작은 index값이 출력 되므로 중복 부분을 다룰 필요가 없다 !!!!
'Algorithm & Data Structure' 카테고리의 다른 글
[백준] 골드바흐의 추측(9020번) - Python (0) | 2022.12.28 |
---|---|
[백준] 베르트랑 공준(4948번) - Python (2) | 2022.12.27 |
[프로그래머스] A 로 B 만들기 ( 배열의 비교 ) (0) | 2022.11.29 |
[백준] 구간성분(10840번) - 해싱 (0) | 2022.10.10 |
[Today I Learned] 알고리즘 기초와 배열 (0) | 2022.09.28 |