Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 컴퓨터공학 #Java #자바 #클래스 #객체 #인스턴스
- 컴퓨터공학 #c #c언어 #문자열입력
- BOJ #컴퓨터공학 #C++ #알고리즘 #자료구조
- 컴퓨터공학 #자료구조 #스택 #c++ #알고리즘 #백준문제풀이
- HTML #CSS
- 잔
Archives
- Today
- Total
영벨롭 개발 일지
[C++]이분 탐색 lower_bound & upper_bound 사용하기 본문
c++ STL에는 이진 탐색을 기반으로 원소를 탐색하는 함수 std::lower_bound, std::upper_bound를 제공합니다.
이 함수들은 이진 탐색을 기반으로 하기 때문에 해당 배열이 오름차순 정렬 되어 있어야 하며, 시간 복잡도를 효율적으로 줄일 수 있습니다. O(log N)
이 함수들은 오름차순 정렬된 자료에서 특정 범위에 속하는 숫자들이 몇 개 있는지 탐색하고자 할 때 유용합니다!
[ 헤더 ]
#include<algorithm>
[ lower_bound ]
lower_bound() 함수는 찾으려는 key 값보다 같거나 큰 숫자가 배열 몇 번째에서 처음 등장하는지 그 iterator를 반환합니다.
기본형 |
std::lower_bound(iterator_First, iterator_Last, key) |
iterator를 반환하기 때문에 배열의 해당 위치에 포인터를 반환합니다.
때문에 해당 위치의 index를 얻으려면 배열의 시작 위치를 빼줘야 합니다.
#include<iostream>
#include<algorithm>
using namespace std;
int main(void) {
int arr[10] = { 10, 6, 3, 2, -1, 10, 10, 8, 5, 3 };
// 오름차순 정렬
sort(arr, arr + 10);
for (int i = 0; i < 10; i++)
cout << arr[i] << " ";
cout << endl;
int x = 10;
auto lower_it = lower_bound(arr, arr + 10, x);
auto lower_index = lower_bound(arr, arr + 10, x) - arr;
cout << lower_it << endl;
cout << *lower_it << endl;
cout << lower_index << endl;
cout << arr[lower_index] << endl;
return 0;
}
[ upper_bound ]
upper_bound()는 찾으려는 key 값을 초과하는 숫자가 배열 몇 번째에서 처음 등장하는지 그 iterator를 반환합니다.
기본형 |
std::upper_bound(iterator_First, iterator_Last, key) |
#include<iostream>
#include<algorithm>
using namespace std;
int main(void) {
int arr[10] = { 10, 6, 3, 2, -1, 10, 10, 8, 5, 3 };
// 오름차순 정렬
sort(arr, arr + 10);
for (int i = 0; i < 10; i++)
cout << arr[i] << " ";
cout << endl;
int x = 3;
auto upper_it = upper_bound(arr, arr + 10, x);
auto upper_index = upper_bound(arr, arr + 10, x) - arr;
cout << upper_it << endl;
cout << *upper_it << endl;
cout << upper_index << endl;
cout << arr[upper_index] << endl;
return 0;
}
반응형
'Programming Language > C & C++' 카테고리의 다른 글
[C++]유용한 STL 알고리즘 함수 (0) | 2022.05.10 |
---|---|
[C++]STL 해시 테이블 unordered_set과 unordered_map (0) | 2022.04.26 |
[C++]순열 next_permutation STL 사용하기 (0) | 2022.03.31 |
[C++]std::array 클래스 사용법 (0) | 2022.03.29 |
[C++]system() 함수 - 몇 가지 명령어 사용해보기 (0) | 2022.03.06 |