문제
풀이
선형탐색(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;
}
'백준 > 기타' 카테고리의 다른 글
4949번: 균형잡힌 세상 [C++] (0) | 2023.04.10 |
---|---|
2164번: 카드2 [C++] (0) | 2023.04.10 |
11866번: 요세푸스 문제 0 [C++] (0) | 2023.04.06 |
7568번: 덩치 [C++] (0) | 2023.04.06 |
11050번: 이항 계수 1 [C++] (0) | 2023.04.06 |