반응형
<문제 소개>
<소스 코드>
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <map>
#include <unordered_map>
#include <set>
#include <cmath>
#include <stack>
#include <queue>
#include <algorithm>
#include <cstdlib>
using namespace std;
int main()
{
// 쓰레드 환경이 아닐때 버퍼를 분리하여 처리속도를 빠르게 해줌
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int A, B;
cin >> A >> B;
set<int> s;
for (int i = 0;i < A + B; i++)
{
int x;
cin >> x;
s.insert(x);
}
int S = s.size(); // 합집합의 갯수
int C = A + B - S; // 교집합의 갯수
int n = S - C; // 대칭 차집합의 갯수
cout << n;
return 0;
}
<풀이과정>
1. A와 B를 입력받고 int형 set 컨테이너 s를 선언한다.
2. A+B번 반복하면서 set에 원소를 하나씩 입력해준다.
3. 위의 입력 결과로 중복이 제거되므로 s의 크기는 두 집합의 합집합의 크기임을 알 수 있다.
4. S는 s의 크기를 대입해 합집합의 갯수를 표현했고, 두 원소의 각 갯수를 더한 것에서 합집합의 갯수를 빼 교집합의 갯수 C를 구했다.
5. 대칭 차집합의 크기는 합집합에서 교집합의 수를 뺀 것과 같으므로 S에서 C를 빼서 구한 뒤 출력해준다.
<코멘트>
세트의 중복되는 원소를 제거하는 특성을 이용해 합집합의 갯수를 구한 뒤 합집합과 각 집합들의 갯수를 이용해 교집합의 갯수를 구하고 합집합과 교집합의 갯수를 빼서 대칭차집합의 갯수를 구했다.
<제출결과>