-
[백준/BOJ] 1822번 차집합 (C++)알고리즘 문제풀이/백준 2021. 9. 26. 17:33
https://www.acmicpc.net/problem/1822
이분 탐색을 이용하면 시간복잡도 O(N * logN)으로 해결할 수 있다. 다만 주의할 점은 a 집합에서 교집합 원소를 제거하는 방식으로 문제를 접근하면 원소의 재배치 과정 때문에 TLE이 발생할 수 있다. 그러므로, 이분 탐색을 통해 찾을 수 없는 원소인 경우에 새로운 벡터에 값을 넣는 방식으로 해결하면 된다.
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(0); int n, m; cin >> n >> m; vector<int> a(n), b(m), res; for(int i = 0; i < n; i++) { cin >> a[i]; } for(int i = 0; i < m; i++) { cin >> b[i]; } sort(b.begin(), b.end()); for(int i = 0; i < n; i++) { int flag = binary_search(b.begin(), b.end(), a[i]); if(flag == 0) res.push_back(a[i]); } sort(res.begin(), res.end()); cout << res.size() << "\n"; for(int i = 0; i < res.size(); i++) { cout << res[i] << " "; } }
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준/BOJ] 8979번 올림픽 (C++) (0) 2021.09.30 [백준/BOJ] 2563번 색종이 (C++) (0) 2021.09.26 [백준/BOJ] 6581번 HTML (C++) (0) 2021.09.25 [백준/BOJ] 1325번 효율적인 해킹 (C++) (0) 2021.09.20 [백준/BOJ] 1919번 애너그램 만들기 (C++) (0) 2021.09.20