이분 탐색으로 lower_bound
구현하기
lower_bound는 어떤 수보다 크거나 같은 수가 처음 나오는 위치를 의미한다. 반대로, upper_bound는 어떤 수보다 큰 수가 처음 나오는 위치를 의미한다.
vector<int> v = {0, 1, 2, 3, 4, 5};
int target = 3;
int left = 0, right = v.size() -1 ;
while(left <= right){
int mid = (left + right) / 2;
if(mid < target)
left = mid + 1;
else // 값이 같은 경우에, 더 작은 값을 탐색한다.
right = mid - 1;
}
이 코드에서는 찾는 값이 나왔을 때 right를 mid 값의 왼쪽으로 이동하며 더 작은 값을 탐색하고 있다. 따라서, 찾고자 하는 수보다 작거나 같은 수를 찾음으로써 lower_bound라고 할 수 있다.
즉, 이분탐색에서는 mid
값이 찾는 값이 나왔을 때, right = mid - 1
즉, 왼쪽 범위를 탐색하면 lower_bound
이고 left = mid + 1
즉, 오른쪽 범위를 탐색하면 upper_bound
이다.
'Langauge > C++' 카테고리의 다른 글
[C++] STL Map 순회하기, 요소 검색하기, 내림차순 정렬하기 (0) | 2023.06.19 |
---|---|
[C++] 스택(stack), 큐(queue), 데크(deque) 직접 구현하기 (1) | 2023.06.19 |
[C++] 코딩테스트에 자주 나오는 문자열 처리 예제들 (0) | 2023.06.19 |
[C++] 코딩 테스트에 자주 나오는 숫자 관련 연산 예제들 (0) | 2023.06.19 |
[C++] 우선순위 큐 (priority_queue) STL 사용법, 구현, 정렬 (0) | 2023.06.19 |