문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
정렬은 다수의 서로 다른 작업에서 첫 번째 단계로 유용하다. 가장 흔한 작업은 어떤 것을 찾기 쉽게 하는 것이지만, 다른 용도도 있다. 이 경우에는, 두 요소 간의 절대값 차이가 가장 작은 쌍이 무엇인지 결정하는 것이 더 쉬워질 것이다.
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]를 반환해라.
closestNumbers 함수를 완성해라.
closestNumbers 함수는 아래와 같은 매개변수를 가지고 있다.
주어진 배열을 정렬을 해주고 반복문을 통해 인자의 최소 차를 갱신해주고 결과 배열에 추가해줬다.
먼저 최소 차를 담을 변수를 선언하고, 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;
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;
}