풀이

단순 선형 탐색으로 찾는 방식은 시간복잡도가 높아 풀 수 없다. 다음의 방법으로 이진 탐색을 선택할 수 있다. 아래처럼 재귀적인 방식으로 풀이했다. 하지만 경험상 재귀적인 방식은 반복문을 사용한 방식에 비해 시간복잡도가 더 높게 측정되는 경우가 많다. 일반적으로는 반복문을 사용한 이진 탐색 방식을 사용하자.

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
 
LL N, M;
int res, check = 0, idx = 0;
vector<int> vec;
 
 
int search(vector<int>& v, int num, int s, int e){
    if (s > e) return 0;
 
    int mid = (s + e) / 2;
 
    if (v[mid] == num) return 1;
    else if (v[mid] > num) return search(v, num, s, mid-1);
    else return search(v, num, mid+1, e);
}
 
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
 
    cin >> N;
    int ins = 0;
    int val;
    for(int i=0; i<N; i++){
        cin >> val;
        vec.push_back(val);
    }
    sort(vec.begin(), vec.end());
 
    cin >> M;
 
    while (M--) {
        res = 0;
        cin >> val;
        res = search(vec, val, 0, vec.size()-1);
        if (res) cout << 1 << '\n';
        else cout << 0 << '\n';
    }
    
 
    return 0;
}