https://www.acmicpc.net/problem/10815
N개의 카드가 있을 때
주어진 번호가 있는지 확인해야 한다.
이 문제를 이분 탐색으로 풀지않는다면
음수까지 고려해 M*2만큼 배열의 크기를 잡고 인덱스로 바로 접근을 해야한다.
따라서 정렬을 한 뒤에
로그N의 시간만큼 탐색을 진행하여 문제를 해결하면 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #include <iostream> #include <vector> #include <algorithm> using namespace std; int N,M; vector<int> card; int binarySearch(int key){ int first=0; int last=card.size()-1; int middle=(first+last)/2; while(first<=last){ if(card[middle]==key) return 1; if(card[middle]>key) last=middle-1; if(card[middle]<key) first=middle+1; middle=(first+last)/2; } return 0; } int main() { std::ios_base::sync_with_stdio(false); cin>>N; card=vector<int> (N,0); for(int i=0;i<N;i++) cin>>card[i]; cin>>M; vector<int> vec(M,0); for(int i=0;i<M;i++) cin>>vec[i]; sort(card.begin(),card.end()); for(int i=0;i<M;i++){ cout<<binarySearch(vec[i])<<" "; } return 0; } | cs |
'알고리즘(BOJ) > 이분탐색' 카테고리의 다른 글
백준 2512번 - 예산 (0) | 2019.06.27 |
---|