map을 활용하여 풀이를 진행한다.
A집합에 있는 값이 B집합에 없는 경우가 차집합이다.
반대도 마찬가지이다.
C++에서는 std::set_symmetric_difference 함수를 사용하여 간단하게 구현가능하다.
auto it = std::set_symmetric_difference(
set1.begin(), set1.end(),
set2.begin(), set2.end(),
result.begin()
);
단, result의 크기는 결과를 저장할 충분한 공간이 확보 되어 있어야한다.
set에 각각 저장해둔 뒤 setA에 있는 값이 setB에 있는지 없는지 파악하면 된다.
//백준 1269, 대칭 차집합
#include <iostream>
#include <set>
std::set<int> A;
std::set<int> B;
int main (){
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
std::cout.tie(NULL);
int N, M;
int n, m;
std::cin >> N >> M;
for(int i{0}; i<N; ++i){
std::cin >> n;
A.insert(n);
}
for(int i{0}; i<M; ++i){
std::cin >> m;
B.insert(m);
}
int ans{0};
for(auto n : A){
if(B.find(n) == B.end()) ++ans;
}
for(auto n : B){
if(A.find(n) == A.end()) ++ans;
}
std::cout << ans << '\n';
return 0;
}
2025-01-26T01:52:24.922Z