https://www.acmicpc.net/problem/10815
풀이는 두 가지로 풀었다.
1) set을 활용. 중복인지 찾으려고 활용하였다.
#include <iostream>
#include <set>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n, m;
set<int> s;
cin >> n;
for (int i = 0; i < n; i++)
{
int a;
cin >> a;
s.insert(a);
}
cin >> m;
for (int i = 0; i < m; i++)
{
int a;
cin >> a;
if (s.find(a) != s.end())
cout << 1 << ' ';
else
cout << 0 << ' ';
}
return 0;
}
하지만 set의 원소 갯수만큼을 다 뒤져야하기 때문에 시간이 n^2이 걸린다.
2) binary search, 즉 이분 탐색을 활용.
이분 탐색을 활용하면 log n 이므로 시간이 단축된다.
이분탐색의 주의점은 정렬이 되어있어야 활용이 가능하다.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n, m;
cin >> n;
vector<int> v(n);
for (int i = 0; i < n; i++)
{
int a;
cin >> a;
v[i] = a;
}
sort(v.begin(), v.end());
cin >> m;
for (int i = 0; i < m; i++)
{
int a;
cin >> a;
if (binary_search(v.begin(), v.end(), a))
{
cout << 1 << ' ';
}
else
cout << 0 << ' ';
}
return 0;
}
'백준 문제풀이 > 실버5' 카테고리의 다른 글
백준 10867번 - 중복 빼고 정렬하기 (0) | 2022.06.21 |
---|---|
백준 2941번 - 크로아티아 알파벳 (0) | 2022.05.28 |
백준 1312번 - 소수 (0) | 2022.03.10 |
백준 11651번 - 좌표 정렬하기 2 (0) | 2022.02.15 |
백준 7568번 - 덩치 (0) | 2022.02.15 |