728x90
반응형
주어진 두 개의 정수 배열에서 공통된 원소(교집합)를 찾는 문제입니다. 각 배열은 중복된 원소를 포함할 수 있지만, 교집합 결과에서 중복된 원소는 한 번만 나타나야 합니다.
public int[] Intersection(int[] nums1, int[] nums2) {
Dictionary<int,int> dic = new Dictionary<int,int>();
HashSet<int> ret = new HashSet<int>();
for(int i = 0;i<nums1.Length;i++){
if(dic.ContainsKey(nums1[i])){
dic[nums1[i]]++;
}
else{
dic[nums1[i]]=1;
}
}
for(int i = 0;i<nums2.Length;i++){
if(dic.ContainsKey(nums2[i])){
ret.Add(nums2[i]);
}
}
return ret.ToArray();
}
두 개의 정수 배열 nums1과 nums2로부터 교집합을 찾는 방법을 구현한 것입니다.
코드는 Dictionary<int, int>와 HashSet<int>을 사용하여 작동합니다.
먼저, nums1 배열의 각 요소와 해당 요소의 빈도를 저장하기 위한 Dictionary 객체인 dic을 생성합니다. 이 딕셔너리의 키는 nums1 배열의 원소이고, 값은 해당 원소의 빈도(나타난 횟수)입니다.
nums1 배열을 반복하면서 각 원소를 dic에 추가하거나 빈도를 증가시킵니다. 만약 딕셔너리에 이미 키가 존재한다면 해당 키의 값을 증가시키고, 그렇지 않다면 새로운 키를 딕셔너리에 추가합니다.
이제 nums2 배열을 반복하면서, 각 원소가 dic 딕셔너리에 있는지 확인합니다. 만약 dic에 존재하는 경우, 해당 원소를 ret이라는 HashSet에 추가합니다. 이렇게 함으로써 교집합의 원소들만 ret에 모아둘 수 있습니다.
마지막으로, ret을 ToArray() 메서드를 사용하여 배열로 변환하고 반환합니다.
이 코드는 중복을 허용하지 않는 HashSet을 사용하여 중복된 원소가 하나로만 유지되고, Dictionary를 사용하여 nums1 배열의 원소 빈도를 계산합니다. 이로써 교집합을 찾는데 효율적인 방법을 구현한 것입니다.
public int[] Intersection(int[] nums1, int[] nums2) {
HashSet<int> set = new HashSet<int>();
List<int> result = new List<int>();
// nums1 배열의 모든 원소를 HashSet에 저장
foreach (int num in nums1) {
set.Add(num);
}
// nums2 배열을 순회하며 교집합을 찾음
foreach (int num in nums2) {
if (set.Contains(num)) {
result.Add(num);
set.Remove(num); // 중복 방지
}
}
// List를 배열로 변환하여 반환
return result.ToArray();
}
한 배열을 순회하며 각 원소를 새로운 데이터 구조(예: HashSet)에 저장합니다. HashSet은 중복을 허용하지 않으므로 중복된 원소가 제거됩니다.
다른 배열을 순회하며 각 원소가 새로운 데이터 구조에 이미 존재하는지를 확인합니다. 존재하면 교집합에 추가합니다.
교집합이 모두 추가된 데이터 구조를 배열로 변환하여 반환합니다.
public int[] Intersection(int[] nums1, int[] nums2) {
HashSet<int> set1 = new HashSet<int>(nums1);
HashSet<int> set2 = new HashSet<int>(nums2);
set1.IntersectWith(set2);
return set1.ToArray();
}
좀 더 효율적인 코드를 작성하기 위해서는 다음과 같은 접근 방법을 고려할 수 있습니다.
두 배열을 HashSet으로 변환하고 IntersectWith 메서드를 사용하여 교집합을 찾습니다. 이러한 방식은 HashSet을 사용하여 중복을 허용하지 않으므로 더 효율적입니다. Runtime 및 memory 성능을 개선하는 데 도움이 될 수 있습니다.
728x90
반응형
'Leetcode' 카테고리의 다른 글
367. Valid Perfect Square (0) | 2023.11.08 |
---|---|
350. Intersection of Two Arrays II (0) | 2023.11.07 |
242. Valid Anagram (0) | 2023.11.07 |
168. Excel Sheet Column Title (0) | 2023.11.06 |
145. Binary Tree Postorder Traversal (0) | 2023.11.05 |