
✅ 오늘의 학습 키워드
- 완전 탐색
- 이진 탐색
🔍 오늘의 문제 분석
- 두 정수 배열과 정수가 주어진다
- 두 정수 배열의 각 요소의 거리가 정수 d보다 큰 경우를 카운트한다
- 정수 배열의 길이는 500 이하이고 정수 d는 100 이하이다
✨ 오늘의 회고
📌내가 적은 답안📌
더보기
class Solution {
public int findTheDistanceValue(int[] arr1, int[] arr2, int d) {
int count=0;
for(int i=0; i<arr1.length; i++){
boolean b = false;
for(int j=0; j<arr2.length; j++){
if((Math.abs(arr1[i]-arr2[j])) <= d) {
b = true;
break;
}
}
if(!b) count++;
}
return count;
}
}
이중 반복문을 사용하고 두 배열의 값을 모두 비교해서 조건을 찾도록 했다. 만약 arr1의 i번째 요소와 arr2의 j번째 요소의 차이가 d 이하이면 boolean을 true로 설정하고 반복문을 종료하도록 했다. arr2 배열 내 요소를 비교한 이후에도 boolean이 false라면 문제의 요구사항에 맞기 때문에 count를 증가하도록 했다. 이 방법은 모든 요소를 반복문으로 검사하기 때문에 완전 탐색이 되고, 시간 복잡도는 O(n * m)가 된다.
추가로 이진 탐색으로 푼 방법이 있어 참고해 보았다.
class Solution {
public int findTheDistanceValue(int[] arr1, int[] arr2, int d) {
Arrays.sort(arr2);
int count = 0;
for (int num : arr1) {
if (!check(arr2, num - d, num + d)) {
count++;
}
}
return count;
}
private boolean check(int[] arr, int min, int max) {
int left = 0;
int right = arr.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] >= min && arr[mid] <= max) {
return true;
} else if (arr[mid] < min) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return false;
}
}
'알고리즘 > [항해99] 1일 1알고리즘 스터디' 카테고리의 다른 글
| 99클럽 코테 스터디 19일차 TIL ✒️Sort 마스터 배지훈의 후계자 (0) | 2025.04.24 |
|---|---|
| 99클럽 코테 스터디 18일차 TIL ✒️캠프가는 영식 (0) | 2025.04.24 |
| 99클럽 코테 스터디 16일차 TIL ✒️Intersection of Two Arrays (0) | 2025.04.21 |
| 99클럽 코테 스터디 15일차 TIL ✒️학생 인기도 측정 (0) | 2025.04.19 |
| 📑주니어 개발자가 면접을 앞두고 준비한 것들 (0) | 2025.04.17 |