1269번: 대칭 차집합
https://www.acmicpc.net/problem/1269
자연수를 원소로 갖는 공집합이 아닌 두 집합 와 가 있다. 이때, 두 집합의 대칭 차집합의 원소의 개수를 출력하는 프로그램을 작성하시오. 두 집합 와 가 있을 때, 와 의 합집합을 와 의 대칭 차집합이라고 한다.
예를 들어, = { 1, 2, 4 } 이고, = { 2, 3, 4, 5, 6 } 라고 할 때, = { 1 } 이고, = { 3, 5, 6 } 이므로, 대칭 차집합의 원소의 개수는 1 + 3 = 4개이다.
첫째 줄에 집합 의 원소의 개수와 집합 의 원소의 개수가 빈 칸을 사이에 두고 주어진다. 둘째 줄에는 집합 의 모든 원소가, 셋째 줄에는 집합 의 모든 원소가 빈 칸을 사이에 두고 각각 주어진다. 각 집합의 원소의 개수는 200,000을 넘지 않으며, 모든 원소의 값은 100,000,000을 넘지 않는다.
첫째 줄에 대칭 차집합의 원소의 개수를 출력한다.
// 입력 // 출력
3 5 4
1 2 4
2 3 4 5 6
대칭 차집합의 원소의 개수를 구하기 위하여, 집합 와 의 합집합에서 교집합을 뺀다.
1) 합집합의 원소의 개수는 두 집합을 하나의 set container에 삽입하면 얻을 수 있다.
2) 교집합의 원소의 개수는 다음 식으로 얻을 수 있다.
(A+B) - (A∪B)
#include <iostream>
#include <set>
using namespace std;
int main() {
int a, b, n;
set<int> s;
cin >> a >> b;
for(int i=0; i<a+b; i++) {
cin >> n;
s.insert(n);
}
// 합집합의 원소의 개수를 n에 저장한다.
n = s.size();
// (합집합의 원소의 개수) - (교집합의 원소의 개수)
cout << n - (a+b-n);
return 0;
}