정수형 배열이 주어지면, 중복되지 않는 쌍(pair)을 만들어
각 쌍에서 원소들 간의 차이 값에 대한 절대값이 가장 최소인 값이 얼마인지 반환하는 문제이다.
간단한 문제라 아래와 같이 풀이 후 Submit을 눌렀는데...
static int minimumAbsoluteDifference(int[] arr) {
int min = Integer.MAX_VALUE;
for(int i=0; i<arr.length-1; i++){
for(int j=i+1; j<arr.length; j++){
min = Math.min(min, Math.abs(arr[i]-arr[j]));
}
}
return min;
}
두 개의 Test Case에서 Fail이 났고, Fail 사유는 시간초과.
이중 for문으로 시간복잡도가 O(n^2)이다.
그래서 한번의 for문을 이용해 풀어야한다..
정렬 후에 인접한 값을 빼주는 방법을 이용하면 한번의 for문으로 가능.
static int minimumAbsoluteDifference(int[] arr) {
int min = Integer.MAX_VALUE;
Arrays.sort(arr);
for(int i=0; i<arr.length-1; i++){
min = Math.min(min, Math.min(min, Math.abs(arr[i]-arr[i+1])));
}
return min;
}
'코딩테스트' 카테고리의 다른 글
[Java]해커랭크 - Two Strings (0) | 2020.02.26 |
---|---|
[Java]해커랭크 - Hash Tables: Ransom Note (0) | 2020.02.26 |
[Java]해커랭크 - Repeated String (0) | 2020.02.26 |
[Java]해커랭크 - Jumping on the Clouds (0) | 2020.02.25 |
[Java]해커랭크 - Sock Merchant (0) | 2020.02.24 |