
문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
차의 절대값은 두 값 a와 b의 양의 차이고, |a - b| 또는 |b - a|로 작성하고 같은 의미를 가진다. 만약 a = 3, b = 2라면 |3 - 2| = |2 - 3| = 1이 된다. 정수형 배열이 주어질 때, 배열의 두 요소 차의 절대값이 최소값을 찾아라.
arr = [-2, 2, 4]
[-2, 2], [-2, 4], [2, 4]의 세 쌍의 숫자가 있다. 세 쌍의 차의 절대값은 |(-2) - 2| = 4, |(-2) - 4| = 6, |2 - 4| = 2 이다. 차의 절대값의 최소값은 2 이다.
minimumAbsoluteDifference 함수를 완성해라. 어떤 쌍의 요소가 차의 절대 최소 값을 나타내는 정수를 반환해야 한다.
minimumAbsoluteDifference 함수는 아래와 같은 매개변수를 가지고 있다.
전체 요소의 차를 구하기 위해 이중 반복문을 사용하면 Time Limit에 걸리게 된다. 그래서 정렬을 먼저하고 해당 요소와 다음 요소의 차를 구할 수 있게 한다면 Time Limit에 걸리지 않고 해결할 수 있다.
먼저 정수 min을 선언하고 Integer.MAX_VALUE를 할당한다. 두 수의 최소 차를 구할 것이기 때문에 작은 값을 계속 할당하기 위함이다.
int min = Integer.MAX_VALUE;
주어진 arr을 오름차순으로 정렬한다.
arr.sort(Comparator.naturalOrder());
그리고 반복문을 통해 해당 요소와 다음 요소의 차를 구하고, 차가 min보다 작을 때, min에 할당한다. 이때 차를 구할때, 절대값으로 계산해야하는데 Math.abs()를 사용한다.
for(int i = 0; i < arr.size() - 1; i++){
if(Math.abs(arr.get(i) - arr.get(i + 1)) < min){
min = Math.abs(arr.get(i) - arr.get(i + 1));
}
}
마지막으로 min을 반환한다.
return min;
public static int minimumAbsoluteDifference(List<Integer> arr) {
int min = Integer.MAX_VALUE;
arr.sort(Comparator.naturalOrder());
for(int i = 0; i < arr.size() - 1; i++){
if(Math.abs(arr.get(i) - arr.get(i + 1)) < min){
min = Math.abs(arr.get(i) - arr.get(i + 1));
}
}
return min;
}