https://www.acmicpc.net/problem/3052

HashSet은 중복을 허용하지 않는 데이터 컬렉션이다.
순서가 중요하지 않고, 중복을 제거하면서 데이터를 저장할 때 사용하면 유용하다.
중복 자동 제거
같은 값이 추가되면 자동으로 무시됨.
빠른 검색 및 추가 (O(1)에 가까운 성능)
List나 Array에서 Contains()로 중복 체크하면 O(n),
HashSet에서는 O(1)에 가까운 성능을 보장.
순서가 없음
List와 다르게 입력한 순서대로 저장되지 않음.
내부적으로 해시 테이블을 사용
Dictionary와 유사하지만 Key만 저장하는 구조.
선언 및 초기화
HashSet<int> set = new HashSet<int>(); // 빈 HashSet 생성
HashSet<int> set2 = new HashSet<int> { 1, 2, 3, 4, 5 }; // 초기값 포함
값 추가 (Add)
set.Add(10); // 추가됨
set.Add(20); // 추가됨
set.Add(10); // 중복 → 추가되지 않음
값 확인 (Contains)
if (set.Contains(10))
{
Console.WriteLine("10이 존재합니다.");
}
값 삭제 (Remove)
set.Remove(10); // 10 제거
전체 데이터 출력
foreach (int num in set)
{
Console.WriteLine(num);
}
namespace backjoon
{
internal class Program
{
static void Main(string[] args)
{
HashSet<int> remainders = new HashSet<int>(); // 중복을 허용하지 않는 HashSet
for (int i = 0; i < 10; i++)
{
int input = int.Parse(Console.ReadLine());
int temp = input % 42;
remainders.Add(temp); // HashSet에 추가 (중복 자동 제거)
}
Console.WriteLine(remainders.Count); // 서로 다른 나머지 개수 출력
}
}
}