[HackerRank] Closest Number

아르당·2024년 4월 8일
0

HackerRank

목록 보기
71/109
post-thumbnail

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

Problem

정렬은 다수의 서로 다른 작업에서 첫 번째 단계로 유용하다. 가장 흔한 작업은 어떤 것을 찾기 쉽게 하는 것이지만, 다른 용도도 있다. 이 경우에는, 두 요소 간의 절대값 차이가 가장 작은 쌍이 무엇인지 결정하는 것이 더 쉬워질 것이다.

Example

arr = [5, 2, 3, 4, 1]

arr' = [1, 2, 3, 4, 5]로 정렬된다. 몇몇의 쌍은 1의 최소 차를 가진다:[(1, 2), (2, 3), (3, 4), (4, 5)]. 배열 [1, 2, 2, 3, 3, 4, 4, 5]를 반환해라.

Function Description

closestNumbers 함수를 완성해라.
closestNumbers 함수는 아래와 같은 매개변수를 가지고 있다.

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

Return

  • int[]: 정수로 표현된 배열

Constraints

  • 2 <= n <= 200000
  • -10^7 <= arr[i] <= 10^7
  • 모든 a[i]는 arr 안에 유일하다.

Solved

주어진 배열을 정렬을 해주고 반복문을 통해 인자의 최소 차를 갱신해주고 결과 배열에 추가해줬다.

먼저 최소 차를 담을 변수를 선언하고, Integer의 최대값을 할당한다. 최대값을 할당한 이유는 초기값을 무조건 할당할 수 있게 하기 위함이다. 그리고 반환할 정수형 배열을 생성한다.

int minimumDifference = Integer.MAX_VALUE;
List<Integer> result = new ArrayList<>();

매개변수 배열 arr을 오름차순으로 정렬한다.

arr.sort(Comparator.naturalOrder());

정렬된 배열을 반복문을 통해 순회한다. 이때 최소 차를 구할 것이라서 시작 인덱스를 0이 아닌 1을 한다.

for(int i = 1; i < arr.size(); i++){

}

반복문 안에 비교문을 통해 인자의 쌍의 차가 minimumDifference보다 작다면 갱신하고 반환할 배열을 새로 생성하고 값을 추가한다.
배열을 새로 생성했지만 다른 방법이 있다면 알려주길 바란다.
같다면 반환할 배열에 추가한다.

if((arr.get(i) - arr.get(i - 1)) < minimumDifference){
	minimumDifference = arr.get(i) - arr.get(i - 1);
	result = new ArrayList<>();
	result.add(arr.get(i - 1));
	result.add(arr.get(i));
}else if((arr.get(i) - arr.get(i - 1)) == minimumDifference){
	result.add(arr.get(i - 1));
	result.add(arr.get(i));
}

마지막으로 배열을 반환한다.

return result;

All Code

public static List<Integer> closestNumbers(List<Integer> arr) {

	int minimumDifference = Integer.MAX_VALUE;
	List<Integer> result = new ArrayList<>();

	arr.sort(Comparator.naturalOrder());

	for(int i = 1; i < arr.size(); i++){
		if((arr.get(i) - arr.get(i - 1)) < minimumDifference){
			minimumDifference = arr.get(i) - arr.get(i - 1);
			result = new ArrayList<>();
			result.add(arr.get(i - 1));
			result.add(arr.get(i));
		}else if((arr.get(i) - arr.get(i - 1)) == minimumDifference){
			result.add(arr.get(i - 1));
			result.add(arr.get(i));
		}
	}

	return result;
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글