문제
정수 n을 기준으로 n과 가까운 수부터 정렬하려고 합니다. 이때 n으로부터의 거리가 같다면 더 큰 수를 앞에 오도록 배치합니다. 정수가 담긴 배열 numlist와 정수 n이 주어질 때 numlist의 원소를 n으로부터 가까운 순서대로 정렬한 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ n ≤ 10,000
- 1 ≤ numlist 의 원소 ≤ 10,000
- 1 ≤ numlist 의 길이 ≤ 100
- numlist 는 중복된 원소를 갖지 않습니다.
import java.util.*;
class Solution {
public int[] solution(int[] numlist, int n) {
int[] answer = new int[numlist.length];
List<Integer> distance = new ArrayList<Integer>(Arrays.asList());
Arrays.sort(numlist);
for(int num : numlist) {
distance.add(Math.abs(num-n));
}
int pnt = 0;
while(pnt != numlist.length) {
int minNum = Collections.min(distance);
for(int i = numlist.length-1; i >= 0; i--) {
if(minNum == distance.get(i)) {
distance.set(i, 10001);
answer[pnt] = numlist[i];
pnt++;
}
}
}
return answer;
}
}
numlist를 정렬한 이유는, 뒤에서부터 탐색 할 예정이였기 때문에, 만약 같은 거리일 경우 더 큰 수를 우선순위로 두기 위함이다. 이제와서 생각났지만 내림차순으로 하면 뒤에서부터 탐색 할 필요가 없을 듯 하다.
그리고 탐색이 완료될 때마다 해당 값을 제한사항에서 벗어나는 값으로 바꿔서 다시 탐색되는 일이 없도록 했다.
출처
https://school.programmers.co.kr/learn/courses/30/lessons/120880