Algorithms/BOJ
백준 10815 - 숫자 카드
dev.wookii
2020. 3. 31. 18:19
https://www.acmicpc.net/problem/10815
10815번: 숫자 카드
첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다. 두 숫자 카드에 같은 수가 적혀있는 경우는 없다. 셋째 줄에는 M(1 ≤ M ≤ 500,000)이 주어진다. 넷째 줄에는 상근이가 가지고 있는 숫자 카드인지 아닌지를 구해야 할 M개의 정수가 주어지며, 이
www.acmicpc.net
문제 설명
상근이가 숫자 카드들을 가지고 있으며 주어진 숫자가 상근이가 가지고 있는 숫자카드에 있는지 없는지를 판단하는 문제이다.
접근 방법
전형적인 이분탐색 문제입니다.
코드
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int n,m;
int nNumber[500001], mNumber[500001];
void bs(int target,int low, int high){
bool searched = false;
while(low<=high){
int mid = (low+high)/2;
if(nNumber[mid]==target){
searched=true;
break;
}
else if(nNumber[mid]<target) low= mid+1;
else high=mid-1;
}
if(searched){cout<<1<<" ";return;}
else {cout<<0<<" ";return;}
}
int main(){
cin>>n;
for(int i=0;i<n;i++) cin>>nNumber[i];
cin>>m;
for(int i=0;i<m;i++) cin>>mNumber[i];
sort(nNumber,nNumber+n);
//for(int i=1;i<=n;i++) cout<<nNumber[i]<<" ";
for(int i=0;i<m;i++){
int start=0,last=n-1;
bs(mNumber[i],start,last);
}
}
funny algorithm *0*b~