대칭 차집합

석준·2023년 7월 26일
1

자료구조

목록 보기
14/17

1269번: 대칭 차집합
https://www.acmicpc.net/problem/1269

문제

자연수를 원소로 갖는 공집합이 아닌 두 집합 AABB가 있다. 이때, 두 집합의 대칭 차집합의 원소의 개수를 출력하는 프로그램을 작성하시오. 두 집합 AABB가 있을 때, (AB)(A-B)(BA)(B-A)의 합집합을 AABB의 대칭 차집합이라고 한다.

예를 들어, AA = { 1, 2, 4 } 이고, BB = { 2, 3, 4, 5, 6 } 라고 할 때, ABA-B = { 1 } 이고, BAB-A = { 3, 5, 6 } 이므로, 대칭 차집합의 원소의 개수는 1 + 3 = 4개이다.

입력

첫째 줄에 집합 AA의 원소의 개수와 집합 BB의 원소의 개수가 빈 칸을 사이에 두고 주어진다. 둘째 줄에는 집합 AA의 모든 원소가, 셋째 줄에는 집합 BB의 모든 원소가 빈 칸을 사이에 두고 각각 주어진다. 각 집합의 원소의 개수는 200,000을 넘지 않으며, 모든 원소의 값은 100,000,000을 넘지 않는다.

출력

첫째 줄에 대칭 차집합의 원소의 개수를 출력한다.

예제 입출력

// 입력              // 출력
3 5                 4
1 2 4
2 3 4 5 6

해결 방향

대칭 차집합의 원소의 개수를 구하기 위하여, 집합 AABB의 합집합에서 교집합을 뺀다.

(AB)(AB)(A∪B) - (A∩B)

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;
}
profile
ERICA SW 19

0개의 댓글