728x90
반응형
- 이진 탐색 : 정렬되어 있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법
- 시간 복잡도 : O(logN)
binarySearch 함수에서 vector 함수를 가져오는 경우 꼭 & 를 써준다
#include <bits/stdc++.h>
using namespace std;
int n, target;
vector<int> arr;
int binarySearch(vector<int>& arr, int target, int start, int end){
while(start <= end){
int mid = (start + end)/2;
// 찾은 경우 중간점 인덱스 반환
if(arr[mid] == target) return mid;
// 중간점의 값보다 찾고자하는 값이 작은 경우 왼쪽 확인
else if(arr[mid] > target) end = mid - 1;
// 중간점의 값보다 찾고자 하는 값이 큰 경우 오른쪽 확인
else start = mid + 1;
}
}
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
// 원소의 개수(n)과 찾고자하는 값(target) 입력받기
cin >> n >> target;
// 전체 원소 입력 받기
for(int i=0; i<n; i++){
int x;
cin >> x;
arr.push_back(x);
}
// 이진 탐색 수행 결과 출력
int result = binarySearch(arr, target, 0, n-1);
if(result == -1){
cout << "원소가 존재하지 않습니다." << '\n';
}
else{
cout << result + 1 << '\n';
}
return 0;
}
https://www.youtube.com/watch?v=94RC-DsGMLo&t=1369
728x90
반응형
'알고리즘' 카테고리의 다른 글
[이코테/이진탐색/C++] 정렬된 배열에서 특정 수의 개수 구하기(lower_bound, upper_bound 사용) (1) | 2023.01.01 |
---|---|
[이코테/이진탐색/C++] 파라메트릭 서치/ 떡볶이 떡 만들기 (0) | 2023.01.01 |
[백준/BFS/C++] 11725번 트리의 부모 찾기 (0) | 2022.12.31 |
[백준/DP/C++] 1699번 제곱수의합 (0) | 2022.12.31 |
[백준/DP/C++] 2579번 계단 오르기 (0) | 2022.12.30 |