백준/이분탐색
[백준 2776번 / C++] 암기왕
배발자
2022. 1. 26. 10:06
반응형
1. 수첩 1에 적혀있는 수들을 오름차순으로 정렬.
2. 이분탐색을 통해서 해당하는 값이 있으면 1 출력. 없으면 0 출력
* unordered_map 을 통해서도 이 문제를 해결할 수 있습니다.
<이분탐색>
#include <iostream>
#include <map>
#include <unordered_map>
#include <algorithm>
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t; cin >> t;
while (t--) {
int n, m;
cin >> n;
vector <int> v1(n, 0);
for (int i = 0; i < n; i++) cin >> v1[i];
sort(v1.begin(), v1.end());
cin >> m; int temp;
for (int i = 0; i < m; i++) {
cin >> temp;
int l = 0; int h = v1.size() - 1;
int mid = 0;
while (l <= h) {
mid = (l+h) /2;
if (v1[mid] == temp) {
cout << 1 << "\n";
break;
}
else if (v1[mid] < temp)l = mid + 1;
else h = mid - 1;
}
if (v1[mid] != temp)cout << 0 << "\n";
}
}
}
<unordered_map>
#include <iostream>
#include <map>
#include <unordered_map>
#include <algorithm>
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t; cin >> t;
while (t--) {
unordered_map <int, int> map;
int n, m;
cin >> n;
for (int i = 0; i < n; i++) {
int c; cin >> c;
map[c] = 1;
}
cin >> m;
for (int i = 0; i < m; i++) {
int c; cin >> c;
if (map[c] == 1)cout << 1 << "\n";
else cout << 0 << "\n";
}
}
}
반응형