[HackerRank] Minimum Absolute Difference in an Array

아르당·2024년 5월 7일
0

HackerRank

목록 보기
83/109
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

차의 절대값은 두 값 a와 b의 양의 차이고, |a - b| 또는 |b - a|로 작성하고 같은 의미를 가진다. 만약 a = 3, b = 2라면 |3 - 2| = |2 - 3| = 1이 된다. 정수형 배열이 주어질 때, 배열의 두 요소 차의 절대값이 최소값을 찾아라.

Example

arr = [-2, 2, 4]

[-2, 2], [-2, 4], [2, 4]의 세 쌍의 숫자가 있다. 세 쌍의 차의 절대값은 |(-2) - 2| = 4, |(-2) - 4| = 6, |2 - 4| = 2 이다. 차의 절대값의 최소값은 2 이다.

Function Description

minimumAbsoluteDifference 함수를 완성해라. 어떤 쌍의 요소가 차의 절대 최소 값을 나타내는 정수를 반환해야 한다.
minimumAbsoluteDifference 함수는 아래와 같은 매개변수를 가지고 있다.

  • int arr[n]: 정수의 배열

Returns

  • int: 차의 절대값의 최소값

Constraints

  • 2 <= n <= 10^5
  • -10^9 <= arr[i] <= 10^9

Solved

전체 요소의 차를 구하기 위해 이중 반복문을 사용하면 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;

All code

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;
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글