이분탐색을 이용하면 쉽게 해결할 수 있는 문제이다.
scanf와 printf를 대신 cin, cout을 사용하면 시간초과가 날 수도 있다.
#include <bits/stdc++.h>
int recursiveFindNumber(vector<int> &arr, int target, int start, int end){
if(start > end) return 0;
int mid = (start + end) /2;
if( arr[mid] == target) return 1;
else if (arr[mid] > target) return recursiveFindNumber(arr, target, start, mid-1);
else return recursiveFindNumber(arr, target, mid+1, end);
}
void findNumber(){
int N;
scanf("%d",&N);
vector<int> arrN;
for(int i=0;i<N;i++){
int n;
scanf("%d",&n);
arrN.push_back(n);
}
sort(arrN.begin(),arrN.end());
int M;
scanf("%d",&M);
int res;
for(int i=0;i<M;i++){
int m;
scanf("%d",&m);
res = recursiveFindNumber(arrN, m, 0, N-1);
printf("%d\n",res);
}
}
'알고리즘 > 탐색' 카테고리의 다른 글
백준[2805] 나무 자르기 (Swift) (0) | 2023.03.19 |
---|---|
백준[1654] 랜선 자르기 (Swift) (0) | 2023.03.19 |
백준[10816] 숫자 카드 2 (Swift) (0) | 2023.03.19 |
백준[2805] 나무 자르기 (0) | 2023.03.11 |
백준[10816] 숫자 카드 2 (0) | 2023.03.11 |