정수 n을 기준으로 n과 가까운 수부터 정렬하려고 합니다. 이때 n으로부터의 거리가 같다면 더 큰 수를 앞에 오도록 배치합니다. 정수가 담긴 배열 numlist와 정수 n이 주어질 때 numlist의 원소를 n으로부터 가까운 순서대로 정렬한 배열을 return하도록 solution 함수를 완성해주세요.
import java.util.*;
class Solution {
public int[] solution(int[] numlist, int n) {
int[] answer = new int[numlist.length];
HashMap<Integer,Integer> l= new HashMap<>();
List<int[]> list = new ArrayList<>();
for (int i = 0; i < numlist.length; i++) {
list.add(new int[]{numlist[i],maxNum(numlist[i],n)});
}
Comparator<int[]> comparator = new Comparator<int[]>() {
@Override
public int compare(int[] arr1, int[] arr2) {
return Integer.compare(arr1[1], arr2[1]); // 배열의 두 번째 원소를 기준으로 오름차순 정렬
}
};
Collections.sort(list, comparator);
for(int i=0; i<list.size()-1;i++){
if(list.get(i)[1]==list.get(i+1)[1]){
if(list.get(i)[0]<list.get(i+1)[0]){
Collections.swap(list, i, i+1);
}
}
}
for (int i = 0; i < answer.length; i++) {
answer[i]=list.get(i)[0];
}
return answer;
}
public int maxNum(int i , int n){
int a=Math.max(i-n,n-i);
return a;
}
}
진짜 특이한 정렬 그자체;;
배열을 담고 있는 리스트를 만들어서 각각의 배열에 원래 숫자와 n과의 거리를 담아서 n의 크기대로 오름차순을 했다
이떄 처음 comparator 을 썼다!! 사실 아직 잘모른다. 이부분은 나중에 더 깊히 파봐야겠다.
그래도 이친구의 도움으로 리스트 자체를 오름차순했다.
그리고 혹시나 거리가 같은 것들이 있을수있으니 for 문 통해서 찾고 서로 자리를 바꾸어 주었다.
그리고 이제 답변에 넣어주면 끝!!!