C#에서 정수 배열에 포함된 모든 중복 요소를 찾는 방법을 알아보겠습니다. 가장 널리 사용되는 접근 방식은 Dictionary를 활용해 각 요소의 등장 횟수를 세는 것입니다. 이 방법은 배열을 한 번만 순회하면 되므로 시간 복잡도 O(n)으로 매우 효율적입니다.
1단계: 중복 요소가 있는 배열 준비
먼저 중복된 값이 포함된 정수 배열을 선언합니다.
int[] arr = {
24,
10,
56,
32,
10,
43,
88,
32
};
위 배열에는 10과 32가 각각 두 번씩 등장합니다. 프로그램 실행 후 이 두 값이 중복으로 감지되어야 합니다.
2단계: Dictionary로 요소 개수 세기
이제 Dictionary<int, int>를 선언하고 foreach 문으로 배열을 순회합니다. 로직은 다음과 같습니다.
- ContainsKey(res): Dictionary에 해당 값이 이미 저장되어 있는지 확인합니다.
- d[res]++: 이미 존재하는 키라면 등장 횟수를 1 증가시킵니다.
- d[res] = 1: 처음 등장한 값이라면 새 항목을 추가하고 횟수를 1로 초기화합니다.
var d = new Dictionary < int, int > ();
foreach(var res in arr) {
if (d.ContainsKey(res))
d[res]++;
else
d[res] = 1;
}
전체 예제 코드
아래는 지금까지 설명한 내용을 하나로 합친 완전한 실행 가능한 예제입니다.
using System;
using System.Collections.Generic;
namespace Demo {
public class Program {
public static void Main(string[] args) {
int[] arr = {
24,
10,
56,
32,
10,
43,
88,
32
};
var d = new Dictionary < int, int > ();
foreach(var res in arr) {
if (d.ContainsKey(res))
d[res]++;
else
d[res] = 1;
}
foreach(var val in d)
Console.WriteLine("{0} occurred {1} times", val.Key, val.Value);
}
}
}
실행 결과
24 occurred 1 times 10 occurred 2 times 56 occurred 1 times 32 occurred 2 times 43 occurred 1 times 88 occurred 1 times
결과 해석 및 응용 팁
출력 결과를 보면 각 요소의 등장 횟수가 표시됩니다. 여기서 값(Value)이 2 이상인 항목, 즉 10과 32가 바로 중복 요소입니다.
중복 요소만 따로 추출하고 싶다면 마지막 출력 부분을 아래처럼 수정하면 됩니다.
foreach(var val in d)
if (val.Value > 1)
Console.WriteLine("중복 요소: {0} ({1}번 등록)", val.Key, val.Value);
이처럼 Dictionary를 활용하면 중복 검색뿐 아니라 각 요소의 빈도 분석까지 한 번에 처리할 수 있어 실무에서도 유용하게 활용됩니다.