* 탐색 전 꼭꼭 int[] arr 정렬하기 !!
> BinarySearch
public static int(int[] arr, key){
int start = 0;
int end = arr.size();
while(start < end){
int mid = (start + end) / 2;
if(arr[mid] == key){ // 구하고자 하는 값을 찾음
return mid;
}else if(arr[mid] < key){
start = mid + 1;
}else{
end = mid - 1;
}
}
return -1; // 탐색 실패
}
> lowerBound 이상의 값 찾기!
public static int lowerBound(int[] arr, key){
int start = 0;
int end = arr.size();
while(start<end){
int mid = (start + end)/2;
if(arr[mid] < key){
start = mid + 1;
}else{
end = mid;
}
}
return start;
}
> upperBound 이하의 값 찾기!
public static int lowerBound(int[] arr, key){
int start = 0;
int end = arr.size();
while(start<end){
int mid = (start + end)/2;
if(arr[mid] <= key){
start = mid + 1;
}else{
end = mid;
}
}
return start;
}
> 관련문제
10816 숫자 카드 2 https://www.acmicpc.net/problem/10816
'알고리즘' 카테고리의 다른 글
[BOJ / Python] 10819 차이를 최대로 (0) | 2023.01.03 |
---|---|
2. 완전 탐색 (0) | 2023.01.03 |
[BOJ] 17298 오큰수 (0) | 2023.01.02 |
1. 자료 구조 (0) | 2022.12.26 |
[BOJ][Java] 1181 단어 정렬 (0) | 2022.01.25 |