반응형
문제 설명:
두 개의 정수 배열 nums1과 nums2가 주어졌을 때, 이 두 배열의 교집합을 계산하는 함수를 작성하세요. 결과 배열에는 두 배열 모두에 나타나는 모든 고유한 정수가 포함되어야 합니다. 결과 배열의 순서는 상관 없습니다.
제한 사항:
- 결과 배열은 고유한 값만 포함해야 합니다. 즉, 중복된 원소를 제거해야 합니다.
- 입력으로 주어지는 두 배열의 길이는 최소 1 이상입니다.
입력:
- nums1: 첫 번째 정수 배열
- nums2: 두 번째 정수 배열
출력:
- 두 배열의 교집합을 나타내는 정수 배열
예시:
입력: nums1 = [1, 2, 2, 1], nums2 = [2, 2] 출력: [2]
입력: nums1 = [4, 9, 5], nums2 = [9, 4, 9, 8, 4] 출력: [9, 4]
- 출력된 순서는 상관 없습니다.
정답 보기:
더보기
import java.util.HashSet;
import java.util.Set;
public class IntersectionOfTwoArrays {
public static int[] intersection(int[] nums1, int[] nums2) {
Set<Integer> set1 = new HashSet<>();
for (int num : nums1) {
set1.add(num);
}
Set<Integer> intersectionSet = new HashSet<>();
for (int num : nums2) {
if (set1.contains(num)) {
intersectionSet.add(num);
}
}
// 교집합 결과를 배열로 변환
int[] result = new int[intersectionSet.size()];
int i = 0;
for (int num : intersectionSet) {
result[i++] = num;
}
return result;
}
public static void main(String[] args) {
int[] nums1 = {1, 2, 2, 1};
int[] nums2 = {2, 2};
int[] result1 = intersection(nums1, nums2);
// 예시 출력: [2]
for (int num : result1) {
System.out.print(num + " ");
}
System.out.println();
int[] nums1b = {4, 9, 5};
int[] nums2b = {9, 4, 9, 8, 4};
int[] result2 = intersection(nums1b, nums2b);
// 예시 출력: [4, 9] (순서는 상관 없음)
for (int num : result2) {
System.out.print(num + " ");
}
System.out.println();
}
}
이 코드는 두 배열 각각을 순회하면서 첫 번째 배열의 모든 요소를 Set에 추가합니다. 그 다음, 두 번째 배열을 순회하면서 첫 번째 Set에 존재하는 요소만을 골라 교집합 Set에 추가합니다. 마지막으로, 교집합 Set의 요소를 결과 배열로 변환하여 반환합니다. 이 방법은 중복을 자동으로 제거하며, 교집합에 있는 고유한 요소만을 쉽게 찾을 수 있습니다.
반응형
'IT > 알고리즘' 카테고리의 다른 글
[Medium] 두 숫자 더하기 (1) | 2024.04.03 |
---|---|
[코딩 인터뷰] 배열에서 k번째로 큰 요소 찾기 (0) | 2024.03.28 |
[코딩 인터뷰] 단어 단위로 문자열 뒤집기 (0) | 2024.03.28 |
[Easy] 삽입 위치 구하기 (0) | 2017.12.14 |
[Easy] 정렬된 배열에서 중복 삭제하기 (0) | 2017.12.13 |