정렬 되어있는 데이터를 검색할 때,for문으로 찾는 것보다 Binary Search로 더 빨리 원하는 값을 찾을 수 있습니다.
(주의: Binary Search와 Binary Search Tree를 헷갈리지마세요!)
1. sort 정렬 후 mid 중간값 찾기
2. 배열의 처음인덱스 start, 마지막인덱스 end
3. target이 mid보다 작으면 end를 mid-1/ 크면 start를 mid+1
4. start가 end와 만나거나 넘으면 target없음
#include<iostream>
#include<vector>
using namespace std;
int target;
vector<int>vect = { 1,2,5,33,44,63,34,99 };
int bsearch(int start, int end, int target) {
while (1) {
int mid = (start + end) / 2;
if (vect[mid] == target)return 1;
if (start > end)return -1;
if (target > vect[mid]) start = mid + 1;
else end = mid - 1;
}
}
int main() {
cin >> target;
int ret = bsearch(0, 7, target);
if (ret == 1) cout << "찾음";
else cout << "없음";
return 0;
}
- 배터리양 확인하기
#include<iostream>
#include<vector>
using namespace std;
string power = "####______";
int bsearch(int start, int end)
{
int Max = -1;
while (1)
{
int mid = (start + end) / 2;
if (start > end)break;
if (power[mid] == '#')
{
if (Max < mid)Max = mid;
start = mid + 1;
}
else end = mid - 1;
}
return Max;
}
int main()
{
int ret = bsearch(0, power.size() - 1);
cout << (ret + 1) * 10 << "%";
return 0;
}
'Algorithm > C++' 카테고리의 다른 글
[21.08.31] DFS 연습하기 (0) | 2021.08.31 |
---|---|
[21.08.27]Priority_queue / Heap Sort / Dijkstra알고리즘 (0) | 2021.08.27 |
[21.08.25] SORT/ UNION-FIND/ 크루스칼알고리즘 (0) | 2021.08.25 |
[21.08.24] DFS/ BFS/ 슬라이딩윈도우 (0) | 2021.08.24 |
[21.08.23] BFS/ 슬라이딩윈도우 기본 (0) | 2021.08.23 |