import java.util.Arrays;
import java.lang.Math;
class Solution {
public int solution(int[] array, int n) {
int answer = 0;
Arrays.sort(array);
int min =array[array.length-1];
int absMin = Math.abs(array[array.length-1]-n);
for (int i = array.length-1 ; i >=0 ; i--){
if( (Math.abs(array[i]-n) <= absMin)){
absMin = Math.abs(array[i]-n);
min = array[i];
}
}
answer = min;
return answer;
}
}
- 예를들어 arr = {2,4,6,8,10,12,10,8,14,10,}이고 n=9 라고하자.
- 가까운 수를 찾을 때 절대값을 이용하여 n과 array배열 원소의 차가 가장 작은 것 뽑았다.
- n과 array배열 원소의 차(절대값)가 가장 작은 수는 9-8과 9-10 즉 차가 1일 때, 원소 8과 10이 가까운 수가 된다.
- 문제에서 가까운 수가 여러 개(8, 10) 일 때 더 작은 수(8)를 return 하라 하였으므로 8이 출력 되야한다.
- 출력값은 index가 필요하지 않으므로 sort를 이용해 배열을 작은수 부터 오름차순으로 정렬하였다.
- index의 역순으로 n과 array배열 원소의 차가 가장 작은 것을 찾아 갔다. 오름차순으로 먼저 정렬 하였으므로 역순으로 진행 해야 n과 array배열 원소의 차가 같을 때 그 중 더 작은 원소를 min 값에 대입 할 수 있다.