반응형
[ 문제 ]
자연수를 원소로 갖는 공집합이 아닌 두 집합 A와 B가 있다. 이때, 두 집합의 대칭 차집합의 원소의 개수를 출력하는 프로그램을 작성하시오. 두 집합 A와 B가 있을 때, (A-B)와 (B-A)의 합집합을 A와 B의 대칭 차집합이라고 한다.
예를 들어, A = { 1, 2, 4 } 이고, B = { 2, 3, 4, 5, 6 } 라고 할 때, A-B = { 1 } 이고, B-A = { 3, 5, 6 } 이므로, 대칭 차집합의 원소의 개수는 1 + 3 = 4개이다.
[ 코드 ]
1. 내 코드
StreamReader sr = new (new BufferedStream(Console.OpenStandardInput()));
StreamWriter sw = new (new BufferedStream(Console.OpenStandardOutput()));
int[] AB = sr.ReadLine().Split().Select(int.Parse).ToArray();
int[] a = sr.ReadLine().Split().Select(int.Parse).ToArray();
int[] b = sr.ReadLine().Split().Select(int.Parse).ToArray();
HashSet<int> set = a.ToHashSet();
for (int i = 0; i < AB[1]; i++)
{
int num = b[i];
if (set.Contains(num))
{
set.Remove(num);
}
else
{
set.Add(num);
}
}
sw.Write(set.Count);
sw.Flush();
sw.Close();
sr.Close();
2. 다른 사람 참고 코드
StreamReader sr = new (new BufferedStream(Console.OpenStandardInput()));
StreamWriter sw = new (new BufferedStream(Console.OpenStandardOutput()));
int[] AB = sr.ReadLine().Split().Select(int.Parse).ToArray();
int[] num = sr.ReadLine().Split().Select(int.Parse).ToArray();
int count = 0;
Dictionary<int, bool> result = new Dictionary<int, bool>();
foreach (int i in num)
{
result.Add(i, false);
}
num = sr.ReadLine().Split().Select(int.Parse).ToArray();
foreach (int i in num)
{
if(result.ContainsKey(i) == true)
{
count++;
}
}
sw.Write($"{(AB[0] + AB[1]) - (count * 2)}");
sw.Flush();
sw.Close();
sr.Close();
[ 실행화면 ]
문제링크: https://www.acmicpc.net/problem/1269
반응형
'Language > C#' 카테고리의 다른 글
[C#] 백준 4949번 균형잡힌 세상 (1) | 2024.03.25 |
---|---|
[C#] 백준 11478번 서로 다른 부분 문자열의 개수 (0) | 2024.03.24 |
[C#] 백준 1764번 듣보잡 (0) | 2024.03.24 |
[C#] 백준 1620번 나는야 포켓몬 마스터 이다솜 (0) | 2024.03.24 |
[C#] 백준 7785번 회사에 있는 사람 (0) | 2024.03.24 |