Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#으로 정수 배열의 모든 중복 요소 찾기: Dictionary 활용 완벽 가이드

C#에서 정수 배열에 포함된 모든 중복 요소를 찾는 방법을 알아보겠습니다. 가장 널리 사용되는 접근 방식은 Dictionary를 활용해 각 요소의 등장 횟수를 세는 것입니다. 이 방법은 배열을 한 번만 순회하면 되므로 시간 복잡도 O(n)으로 매우 효율적입니다.

1단계: 중복 요소가 있는 배열 준비

먼저 중복된 값이 포함된 정수 배열을 선언합니다.

int[] arr = {
   24,
   10,
   56,
   32,
   10,
   43,
   88,
   32
};

위 배열에는 1032가 각각 두 번씩 등장합니다. 프로그램 실행 후 이 두 값이 중복으로 감지되어야 합니다.

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 이상인 항목, 즉 1032가 바로 중복 요소입니다.

중복 요소만 따로 추출하고 싶다면 마지막 출력 부분을 아래처럼 수정하면 됩니다.

foreach(var val in d)
   if (val.Value > 1)
      Console.WriteLine("중복 요소: {0} ({1}번 등록)", val.Key, val.Value);

이처럼 Dictionary를 활용하면 중복 검색뿐 아니라 각 요소의 빈도 분석까지 한 번에 처리할 수 있어 실무에서도 유용하게 활용됩니다.