정수 n을 기준으로 n과 가까운 수부터 정렬하려고 합니다. 이때 n으로부터의 거리가 같다면 더 큰 수를 앞에 오도록 배치합니다. 정수가 담긴 배열 numlist와 정수 n이 주어질 때 numlist의 원소를 n으로부터 가까운 순서대로 정렬한 배열을 return하도록 solution 함수를 완성해주세요.
출처: https://school.programmers.co.kr/learn/courses/30/lessons/120880
import java.util.*;
class Solution {
public int[] solution(int[] numlist, int n) {
List<Integer> num = new ArrayList<>();
List<Integer> minus = new ArrayList<>();
List<Integer> res = new ArrayList<>();
int min = 0;
int min_ind = 0;
for (int i : numlist) {
num.add(i);
minus.add(Math.abs(i - n));
}
while (!num.isEmpty()) {
min = minus.get(0);
min_ind = 0;
for (int i = 1; i < minus.size(); i++) {
if (min > minus.get(i)) {
min = minus.get(i);
min_ind = i;
} else if (min == minus.get(i)) {
if (num.get(min_ind) > num.get(i)) {
min = minus.get(min_ind);
} else if (num.get(min_ind) < num.get(i)) {
min = minus.get(i);
min_ind = i;
}
}
}
res.add(num.get(min_ind));
num.remove(min_ind);
minus.remove(min_ind);
}
int ind = 0;
int[] answer = new int[res.size()];
for(int i:res){
answer[ind++] = i;
}
return answer;
}
}
1) numlist에 들어있는 모든 숫자들을 num에 삽입한다.
2) minus라는 list에 num에 들어있는 모든 숫자들로부터 n을 뺀 절댓값을 삽입한다.
3) minus에서 가장 작은 값 자체와 그 값의 index를 구해서 각각 min과 min_ind에 저장한다. 만약 같은 숫자가 minus에 있다면더 큰 수를 min으로 설정한다.
4) res라는 리스트에 min값을 삽입한 뒤, num과 minus에서 해당 숫자를 제거한다.
5) res를 출력하면 끝!