정수 목록에서 중복된 값을 찾아 출력하려면 Dictionary 컬렉션과 ContainsKey() 메서드를 활용하면 됩니다.
핵심 아이디어
Dictionary의 키(key)에 각 정수를 저장하고, 이미 존재하는 키라면 해당 값(value)을 1씩 증가시키는 방식입니다. 이렇게 하면 각 숫자가 몇 번 등장했는지 손쉽게 집계할 수 있으며, 값이 2 이상인 항목이 곧 중복된 숫자입니다.
예제 코드
먼저 중복이 포함된 정수 배열을 선언합니다.
int[] arr = {
3,
6,
3,
8,
9,
2,
2
};그다음 Dictionary 컬렉션을 사용해 각 정수의 등장 횟수를 계산하고, 결과를 출력합니다.
using System;
using System.Collections.Generic;
namespace Demo {
public class Program {
public static void Main(string[] args) {
int[] arr = {
3,
6,
3,
8,
9,
2,
2
};
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}은(는) {1}번 나타났습니다", val.Key, val.Value);
}
}
}실행 결과
3은(는) 2번 나타났습니다 6은(는) 1번 나타났습니다 8은(는) 1번 나타났습니다 9은(는) 1번 나타났습니다 2은(는) 2번 나타났습니다
코드 설명
- ContainsKey(res): Dictionary에 해당 정수가 이미 키로 존재하는지 확인합니다.
- d[res]++: 이미 존재한다면 등장 횟수를 1 증가시킵니다.
- d[res] = 1: 처음 등장한 숫자라면 횟수를 1로 초기화합니다.
- 마지막 반복문에서 모든 숫자와 등장 횟수를 화면에 출력합니다.
이 방법은 시간 복잡도 O(n)으로 동작하므로, 큰 배열에서도 효율적으로 중복을 찾을 수 있습니다. 만약 중복된 숫자(2회 이상 등장한 값)만 골라서 출력하고 싶다면, 마지막 반복문에서 val.Value > 1 조건을 추가하면 됩니다.