일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- JPA
- matplotlib
- Loss Function
- YOLOv5
- OG tag
- html
- marksense.ai
- google login
- 순환참조
- idToken
- google cloud
- C++
- 2021 제9회 문화공공데이터 활용경진대회
- javascript
- Expo
- pandas
- yolo
- 코드업
- 커스텀 데이터 학습
- STT
- react native
- google 로그인
- Spring
- @Transactional
- Spring Boot
- oauth
- 양방향 매핑
- skt fellowship 3기
- 졸프
- AWS
Archives
- Today
- Total
민팽로그
[C++] lower_bound, upper_bound 본문
STL의 lower_bound, upper_bound는 이분탐색을 이용하여 특정 원소를 찾는 탐색 알고리즘임.
올바를 결과를 얻기 위해서 함수를 적용할 배열은 반드시 오름차순 정렬되어 있어야 하며 <algorithm> 헤더파일에 포함됨.
lower_bound
- 찾으려는 key값이 최초로 나타나는 지점의 인덱스를 리턴.
- 배열에 해당 key값이 없다면, key값보다 큰 원소가 최초로 나타나는 지점의 인덱스를 리턴.
- 즉, key값 이상의 원소가 최초로 나타나는 지점의 인덱스를 리턴하는 함수임.
upper_bound
- 찾으려는 key값보다 큰 원소가 최초로 나타나는 지점의 인덱스를 리턴.
1) lower_bound, upper_bound 구현
#include <iostream>
#include<algorithm>
using namespace std;
int arr[10] = { 1, 1, 2, 2, 6, 6, 8, 8, 8, 9 };
int lowerBound(int start, int end, int item) {
while (start < end) {
int mid = (start + end) / 2;
if (arr[mid] < item) start = mid + 1;
else end = mid;
}
return end;
}
int upperBound(int start, int end, int item) {
while (start < end) {
int mid = (start + end) / 2;
if (arr[mid] <= item) start = mid + 1;
else end = mid;
}
return end;
}
int main() {
cout << "lower_bound(6): " << lowerBound(0, 10, 6) << endl;
cout << "uppser_bound(6): " << upperBound(0, 10, 6) << endl;
cout << "lower_bound(9): " << lowerBound(0, 10, 9) << endl;
cout << "uppser_bound(9): " << upperBound(0, 10, 9) << endl;
return 0;
}
'C++' 카테고리의 다른 글
[c++] string 자료형 문자열 비교: compare함수 (0) | 2022.05.06 |
---|---|
[c++] 공백 포함하여 문자열 입력 받기 (0) | 2022.04.25 |
[C++] 문자열 파싱 - 문자열에서 토큰 분리 (0) | 2021.12.30 |
[c++] vector 자료구조 (0) | 2021.12.11 |
[C++] 입출력 속도 개선 - ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); (0) | 2021.12.04 |
Comments