문제
https://www.acmicpc.net/problem/1269
문제 요약
자연수를 원소로 갖는 두 집합 A, B가 주어졌을 때,
두 집합의 대칭 차집합의 원소 개수를 출력한다.
대칭 차집합이란, (A - B) U (B - A) 를 의미한다.
코드
#include <iostream>
#include <algorithm>
#include <set>
using namespace std;
set<int> A, B, res;
int n, m;
int main() {
// 입출력 단축
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n >> m;
for (int i = 0; i < n; i++) {
int num;
cin >> num;
A.insert(num);
}
for (int i = 0; i < m; i++) {
int num;
cin >> num;
B.insert(num);
}
set_symmetric_difference(A.begin(), A.end(), B.begin(), B.end(), inserter(res, res.begin()));
cout << res.size();
return 0;
}
코드 설명
C++ STL 라이브러리 <set> 을 사용하여 문제를 해결한다.
고찰
그 외 집합 연산에 대해 다시 한 번 공부하는 계기가 되었다.
1. 합집합
set_union(A.begin(), A.end(), B.begin(), B.end(), inserter(res, res.begin()));
2. 교집합
set_intersection(A.begin(), A.end(), B.begin(), B.end(), inserter(res, res.begin()));
3. 차집합
set_difference(A.begin(), A.end(), B.begin(), B.end(), inserter(res, res.begin()));
4. 대칭 차집합
set_symmetric_difference(A.begin(), A.end(), B.begin(), B.end(), inserter(res, res.begin()));
추가로, inserter는 결과를 특정 집합에 저장하는 역할을 한다.
'Algorithm Problems > 수학' 카테고리의 다른 글
[백준/C++] 4344번: 평균은 넘겠지 (3) | 2024.09.25 |
---|---|
[백준/C++] 피보나치 수 3 (1) | 2024.08.04 |
[백준/C++] 9471번: 피사노 주기 (2) | 2024.08.04 |
[백준/C++] 18110번: solved.ac (1) | 2024.06.04 |
[백준/C++] 5692번: 팩토리얼 진법 (0) | 2024.05.18 |