처음에는 vector를 사용해 A와 B 집합을 저장하고 전체비교를 통해 A의 B 차집합을 구하려고 했지만 시간초과가 발생할거 같았다. 이전에 배운 set이란 컨테이너가 생각나서 다시 복습해봤다.
set은 자료가 정렬된 형태로 저장되며, 중복을 허용하지 않고, 이진트리구조로 저장되기 때문에 검색연산이 빠르다는 장점이 있다.
#include <iostream>
#include <algorithm>
#include <set>
using namespace std;
void input_set(set<int>& A)
{
int n_A, n_B;
int i, temp;
cin >> n_A >> n_B;
for (i = 0; i < n_A; i++)
{
cin >> temp;
A.insert(temp);
}
for (i = 0; i < n_B; i++)
{
cin >> temp;
if (A.find(temp) != A.end())//A안에 temp값이 존재한다면?
{
A.erase(temp);
}
}
return;
}
void find_answer(set<int>& A)
{
if (A.size() == 0)
{
cout << A.size() << "\n";
}
else
{
cout << A.size() << "\n";
for (int i : A)
{
cout << i << " ";
}
cout << "\n";
}
return;
}
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
set<int> A;
input_set(A);
find_answer(A);
return 0;
}