본문 바로가기

algorithm

백준 1269번 대칭 차집합

https://www.acmicpc.net/problem/1269

 

아이디어:

1. (A - B) + (B - A) 는 (A ∪ B) - (A ∩ B) 와 같다.

2. 교집합을 구하는 set_intersection() 함수는 아직 사용하기 어려워 정석대로 A ∪ B와 A ∩ B를 구해서 erase했다.

3. A ∪ B는 하나의 set에 A와 B의 원소를 모두 insert하면 알아서 중복을 제거하며 생성된다.

4. A ∩ B는 하나의 B의 원소가 A의 원소에도 있으면 추가하는 식으로 생성한다.

5. A ∪ B에서 A ∩ B를 erase하고 size를 출력한다.

 

// 1269

#include <iostream>
#include <set>

using namespace std;

int main() {

	int n, m, k;

	cin >> n >> m;

	set<int> A;
	set<int> B;
	set<int> ABunion;
	set<int> ABinter;
	
	for (int i = 0; i < n; i++) {
		cin >> k;
		A.insert(k);
		ABunion.insert(k);
	}

	for (int i = 0; i < m; i++) {
		cin >> k;
		B.insert(k);
		ABunion.insert(k);
	}

	for (set<int>::iterator iter = B.begin(); iter != B.end(); iter++) {
		if (A.find(*iter) != A.end()) {
			ABinter.insert(*iter);
		}
	}

	for (set<int>::iterator iter = ABinter.begin(); iter != ABinter.end(); iter++) {
		ABunion.erase(*iter);
	}

	cout << ABunion.size();

	return 0;
}