본문 바로가기
만들어 봐요/알고리즘

[코딩 인터뷰] 두 배열의 교집합 구하기

by 네야나라 2024. 3. 28.
반응형

문제 설명:

두 개의 정수 배열 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의 요소를 결과 배열로 변환하여 반환합니다. 이 방법은 중복을 자동으로 제거하며, 교집합에 있는 고유한 요소만을 쉽게 찾을 수 있습니다.

반응형