입력
첫째 줄에 집합 A의 원소의 개수와 집합 B의 원소의 개수가 빈 칸을 사이에 두고 주어진다. 둘째 줄에는 집합 A의 모든 원소가, 셋째 줄에는 집합 B의 모든 원소가 빈 칸을 사이에 두고 각각 주어진다. 각 집합의 원소의 개수는 200,000을 넘지 않으며, 모든 원소의 값은 100,000,000을 넘지 않는다.
출력
첫째 줄에 대칭 차집합의 원소의 개수를 출력한다.
서로 포함한 걸 알아야하므로 Set자료구조가 떠올랐다.
A집합과 B집합의 set을 두 개 만들고
각각 원소를 상대 집합의 set에서 찾아보며 답을 내는식으로 구현하였다.
생각해보니 Set하나만 써도 구현이 가능하였다.
#include<iostream>
#include<unordered_set>
using namespace std;
unordered_set <int> groupA;
unordered_set<int> groupB;
int groupASize,groupBsize;
void Input() {
int inputSetElem=0;
cin >> groupASize>>groupBsize;
//A 원소들 Set에 넣어줌
for (int i = 0; i < groupASize; i++) {
cin >> inputSetElem;
groupA.insert(inputSetElem);
}
//B원소들 set에 넣어줌
for (int i = 0; i < groupBsize; i++) {
cin >> inputSetElem;
groupB.insert(inputSetElem);
}
}
void Solution() {
int Ans = 0;
//A의 원소중 B와 겹치는거 탐색
for (int elem : groupA) {
if (groupB.find(elem) == groupB.end()) {
Ans++;
}
}
//B의 원소 중 A와 겹치는거 탐색
for (int elem : groupB) {
if (groupA.find(elem) == groupA.end()) {
Ans++;
}
}
cout << Ans;
}
int main(){
Input();
Solution();
}
#include<iostream>
#include<unordered_set>
using namespace std;
unordered_set <int> groupA;
int groupASize,groupBSize,commonElemsAmount;
void Input() {
int inputSetElem=0;
cin >> groupASize>>groupBSize;
//그룹 A값을 다 groupA에 넣고
for (int i = 0; i < groupASize; i++) {
cin >> inputSetElem;
groupA.insert(inputSetElem);
}
//B의 원소들을 그룹A에서 탐색후 공통원소라면 commonElemsAmount값 증가
for (int i = 0; i < groupBSize; i++) {
cin >> inputSetElem;
if (groupA.find(inputSetElem) != groupA.end()) {
commonElemsAmount++;
}
}
}
void Solution() {
//총 사이즈에서 공통값 2배 빼면 답
int Ans = groupASize+groupBSize-2 * commonElemsAmount;
cout << Ans;
}
int main(){
Input();
Solution();
}
set을 이용하면 중복값을 빠르게 체크할 수 있는 문제다