본문 바로가기
코딩테스트 준비/백준

[백준 1269번][C++] 대칭 차집합

by 스테디코디스트 2023. 8. 4.
반응형

<문제 소개>


<소스 코드>

#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <map>
#include <unordered_map>
#include <set>
#include <cmath>
#include <stack>
#include <queue>
#include <algorithm>
#include <cstdlib>
using namespace std;

int main()
{
	// 쓰레드 환경이 아닐때 버퍼를 분리하여 처리속도를 빠르게 해줌
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int A, B;
	cin >> A >> B;

	set<int> s;
	
	for (int i = 0;i < A + B; i++)
	{
		int x;
		cin >> x;

		s.insert(x);
	}

	int S = s.size(); // 합집합의 갯수
	int C = A + B - S; // 교집합의 갯수

	int n = S - C; // 대칭 차집합의 갯수

	cout << n;

	return 0;
}

<풀이과정>

1. A와 B를 입력받고 int형 set 컨테이너 s를 선언한다.

2. A+B번 반복하면서 set에 원소를 하나씩 입력해준다.

3. 위의 입력 결과로 중복이 제거되므로 s의 크기는 두 집합의 합집합의 크기임을 알 수 있다.

4. S는 s의 크기를 대입해 합집합의 갯수를 표현했고, 두 원소의 각 갯수를 더한 것에서 합집합의 갯수를 빼 교집합의 갯수 C를 구했다.

5. 대칭 차집합의 크기는 합집합에서 교집합의 수를 뺀 것과 같으므로 S에서 C를 빼서 구한 뒤 출력해준다.


<코멘트>

세트의 중복되는 원소를 제거하는 특성을 이용해 합집합의 갯수를 구한 뒤 합집합과 각 집합들의 갯수를 이용해 교집합의 갯수를 구하고 합집합과 교집합의 갯수를 빼서 대칭차집합의 갯수를 구했다.

합집합 S - 교집합 C = 대칭차집합 n


<제출결과>