정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요.
| array | n | result |
|---|---|---|
| [3, 10, 28] | 20 | 28 |
| [10, 11, 12] | 13 | 12 |
import java.util.HashMap;
import java.util.Collections;
import java.util.Map;
class Solution {
public int solution(int[] array, int n) {
HashMap<Integer, Integer> abs = new HashMap<>();
for(int i=0; i<array.length; i++){
abs.put(array[i], Math.abs(array[i]-n));
}
return Collections.min(abs.entrySet(), Map.Entry.comparingByValue()).getKey();
}
}
import java.util.Arrays;
class Solution {
public int solution(int[] array, int n) {
Arrays.sort(array);
int answer = 0;
for(int i = 1 ; i < array.length ; i++){
if(Math.abs(n-array[0]) > Math.abs(n-array[i])){
array[0] = array[i];
}
}
answer = array[0];
return answer;
}
}
HashMap을 사용해서 key에는 array 배열의 값, value에는 n-array[i]를 한 절대값을 넣었다.
value 값이 최솟값인 key를 return 해주었다.
array를 먼저 오름차순으로 정렬하고,
반복문을 사용해서 절댓값의 최솟값을 구했다.
코드 설명:
return Collections.min(abs.entrySet(), Map.Entry.comparingByValue()).getKey();
abs.entrySet():
Map.Entry.comparingByValue():
Collections.min(..., Comparator):
.getKey():
요약
Collections.min(abs.entrySet(), Map.Entry.comparingByValue())는 abs 맵에서 값이 가장 작은 entry를 찾고,.getKey()는 그 entry의 키를 반환하는 방식입니다.