목차
백준 단계별로 풀어보기
25.11.03
14단계: 집합과 맵
1269번: 대칭 차집합
문제 링크 : https://www.acmicpc.net/problem/1269
문제를 풀기 위해 알아야 할 개념
>> 대칭 차집합의 개수
: 두 집합 A와 B가 있을 때, 대칭 차집합은 (A - B)와 (B - A)의 합집합 즉, 전체 집합에서 교집합을 제외한 부분을 의미한다.
--> 전체 집합 = (A + B) - (A ∩ B) 이다. 따라서 대칭 차집합은 (A + B) - (2 × A ∩ B) 이다.
문제 풀이
: 두 집합 A와 B의 원소는 중복이 없고 두 집합의 교집합만 찾으면 되기 때문에 HashSet 자료구조를 사용하기에 적합하다.
- StreamReader로 입력값을 받아 각각 int값으로 변환하여 집합 A의 원소의 개수를 담을 변수 a 와 집합 B의 원소의 개수를 담을 변수 b 에 담고, 집합 A의 원소를 담을 HashSet인 A 와 집합 B의 원소를 담을 HashSet인 B 를 초기화한다.
- 집합 A와 B 각각 StreamReader로 입력값을 받아 for 반복문을 통해 A 에 원소를 담는다.
- 집합 A와 B의 공집합의 원소의 개수를 담을 변수 count 를 0으로 초기화하고, foreach 반복문과 Contains 메서드를 통해 집합 A의 원소가 집합 B에도 포함되어 있다면 count 를 증가시킨다.
- StreamWriter로 대칭 차집합의 개수를 계산하여 출력한다.
정답 코드
using System.IO;
class Backjoon
{
static void Main(string[] args)
{
using var sr = new StreamReader(Console.OpenStandardInput());
using var sw = new StreamWriter(Console.OpenStandardOutput());
string[] input = sr.ReadLine().Split();
int a = int.Parse(input[0]);
int b = int.Parse(input[1]);
HashSet<int> A = new HashSet<int>();
HashSet<int> B = new HashSet<int>();
string[] numA = sr.ReadLine().Split();
for (int i = 0; i < a; i++)
{
A.Add(int.Parse(numA[i]));
}
string[] numB = sr.ReadLine().Split();
for (int i = 0; i < b; i++)
{
B.Add(int.Parse(numB[i]));
}
int count = 0;
foreach (var num in A)
{
if (B.Contains(num))
count++;
}
sw.Write(A.Count + B.Count - 2 * count);
}
}'Development > Baekjoon' 카테고리의 다른 글
| [C#] 1934번: 최소공배수 (0) | 2025.11.05 |
|---|---|
| [C#] 11478번: 서로 다른 부분 문자열의 개수 (0) | 2025.11.04 |
| [C#] 1764번: 듣보잡 (0) | 2025.11.02 |
| [C#] 10816번: 숫자 카드 2 (0) | 2025.11.01 |
| [C#] 1620번: 나는야 포켓몬 마스터 이다솜 (0) | 2025.10.31 |