1. 풀이방법
- 시간제한은 2초
- N,M 모두 최대 1,000,000 이므로 M배열의 각각의 원소에 대해 N배열을 선형탐색하면 시간초과가 발생
- N배열을 정렬하고 (c++ stl에서 제공하는 sort함수는 O(nlogn)을 보장해줍니다.
- 그후 M배열 각각의 원소로 N배열에 대해서 이분탐색을 진행 하시면 됩니다.
- 재귀, 반복문 다 구현 가능하며 저는 이 문제는 while문으로 구현하였습니다.
2. 주의사항
- 시간초과
3. 나의코드
#include<bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int t, n, m;
cin >> t;
while (t--) {
cin >> n;
vector<int> narr(n);
for (int i = 0; i < n; i++) cin >> narr[i];
sort(narr.begin(), narr.end()); // 정렬
cin >> m;
vector<int> marr(m);
for (int i = 0; i < m; i++) cin >> marr[i];
for (int i = 0; i < m; i++) { //수첩 2
int lowindex = 0; int highindex = n - 1;
while (1) {
if (lowindex > highindex) { cout << 0<<"\n"; break;}
int midindex = (lowindex + highindex) / 2;
if (narr[midindex] == marr[i]) {cout << 1 << "\n"; break;}
if (narr[midindex] > marr[i]) {
highindex = midindex - 1;
}
else {
lowindex = midindex + 1;
}
}
}
}
return 0;
}
'알고리즘 문제풀이 > 탐색' 카테고리의 다른 글
백준 2003 [C++] (0) | 2021.09.19 |
---|---|
백준 3079 [C++] (0) | 2021.01.27 |
백준 2792 [C++] (0) | 2021.01.26 |
백준 1254 [C++] (0) | 2021.01.15 |
백준 6064 [C++] (0) | 2020.11.30 |