백준/기타
1920번: 수 찾기 [C++]
Koalitsiya
2023. 4. 10. 18:01
문제
풀이
선형탐색(Linear Search)을 이용하면 시간초과가 발생하기 때문에 이분탐색(Binary Search)을 통해 해결하였습니다.
#include <iostream>
#include <algorithm>
using namespace std;
int arr[100001];
void binary_search(int list[], int key, int right) {
int left = 0;
int middle;
while (left <= right) {
middle = (left + right) / 2;
if (key == list[middle]) {
cout << "1\n";
return;
}
else if (key > list[middle])
left = middle + 1;
else if (key < list[middle])
right = middle - 1;
}
cout << "0\n";
return;
}
int main() {
int n, m, num;
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n;
for (int i = 0; i < n; i++)
cin >> arr[i];
sort(arr, arr + n);
cin >> m;
for (int i = 0; i < m; i++) {
cin >> num;
binary_search(arr, num, n - 1);
}
return 0;
}