자율 학습/스터디

[LeetCode] 2215. Find the Difference of Two Arrays

2025. 3. 18. 12:38

📌 문제 요약

주어진 두 정수 배열 nums1과 nums2

각각 nums1에는 있지만 nums2에는 없는 숫자와 nums2에는 있지만 nums1에는 없는 숫자를 구해서 두 개의 리스트로 반환하라.

반환되는 리스트의 첫 번째 요소는 nums1에서만 존재하는 값들, 두 번째 요소는 nums2에서만 존재하는 값들을 포함해야 한다.

 

💡 풀이 포인트

  • 중복된 숫자는 결과에 한 번만 포함
  • 각 배열에서 상대 배열에 없는 값을 찾아내야 함.
  • 두 개의 리스트로 반환됨.

 

✅ 풀이 방법

  1. nums1과 nums2에서 중복을 제거한 후 각 배열의 차집합을 구합니다.
    • 차집합 = 하나의 집합에서 다른 집합의 원소 제외한 결과
  2. nums1에만 있는 원소 = nums1 - nums2
    nums2에만 있는 원소 = nums2 - nums1
  3. 두 차집합을 각각 리스트 형태로 반환

 

import java.util.*;

class Solution {
    public List<List<Integer>> findDifference(int[] nums1, int[] nums2) {
        Set<Integer> set1 = new HashSet<>();
        Set<Integer> set2 = new HashSet<>();
        
        // 배열 nums1과 nums2의 값들을 set에 추가
        for (int num : nums1) {
            set1.add(num);
        }
        for (int num : nums2) {
            set2.add(num);
        }
        
        // 차집합
        Set<Integer> onlyInNums1 = new HashSet<>(set1);
        onlyInNums1.removeAll(set2); // nums1에만 있는 값들
        
        Set<Integer> onlyInNums2 = new HashSet<>(set2);
        onlyInNums2.removeAll(set1); // nums2에만 있는 값들
        
        List<List<Integer>> result = new ArrayList<>();
        result.add(new ArrayList<>(onlyInNums1));
        result.add(new ArrayList<>(onlyInNums2));
        
        return result;
    }
}