코드
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int N, M;
int nnum[100001];
int mnum[100001];
bool chk;
cin >> N;
for(int i = 0; i < N; i++){
cin >> nnum[i];
}
cin >> M;
for(int i = 0; i < M; i++){
cin >> mnum[i];
}
sort(nnum, nnum+N);
for(int i = 0; i < M; i++){
chk = false;
int low = 0;
int high = N-1;
int mid = (low+high)/2;
while(low <= high){
mid = (low+high)/2;
if(mnum[i] == nnum[mid]){
cout << "1" << "\n";
chk = true;
break;
}
else if(mnum[i] > nnum[mid]){
low = mid+1;
}
else if(mnum[i] < nnum[mid]){
high = mid-1;
}
}
if(chk == false) cout << "0" <<"\n";
}
return 0;
}
알게된 점
처음엔 그냥 처음부터 찾았는데, 시간초과가 나와서
정렬을 한다음에 이분탐색으로 찾았다.
그냥찾으면 N^2인데
정렬한다음에 이분탐색으로 찾으면 NlogN이나와서 된 것 같다.
'하루하나코딩' 카테고리의 다른 글
백준 2164 : 카드2 c++ (0) | 2023.03.31 |
---|---|
백준 2108 : 통계학 c++ (0) | 2023.03.31 |
백준 1436 : 영화감독 숌 c++ (0) | 2023.03.29 |
백준 1259 : 팰린드롬수 c++ (0) | 2023.03.29 |
백준 1085 : 직사각형에서 탈출 (0) | 2023.03.28 |