문제 풀이/LeetCode

LeetCode 2215번 find the difference of two arrays

춘핑이 2023. 3. 15. 16:54

문제

Given two 0-indexed integer arrays nums1 and nums2, return a list answer of size 2 where:
answer[0] is a list of all distinct integers in nums1 which are not present in nums2.
answer[1] is a list of all distinct integers in nums2 which are not present in nums1.
Note that the integers in the lists may be returned in any order.
2개 배열을 받고 첫배열에는 잇고 두번째에는 없는 아이템을 모은 것 + 반대경우의 리스트를 리턴하기

내 코드

public List<List<Integer>> findDifference(int[] nums1, int[] nums2) {
    // 코드 작성
    Set<Integer> set1 = new HashSet<>();
    Set<Integer> set2 = new HashSet<>();

    for (int num : nums1) {
        set1.add(num);
    }

    for (int num : nums2) {
        set2.add(num);
        set1.remove(num);
    }

    for (int num : nums1) {
        set2.remove(num);
    }

    List<List<Integer>> answer = new ArrayList<>();
    answer.add(new ArrayList<>(set1));
    answer.add(new ArrayList<>(set2));
    return answer;
}

풀이

중복값을 없애기 위해 각 배열을 set에 담았다.
이후 for문을 돌면서 num1배열의 값으로 set2에서 지우고 num2의 값으로 set1에서 값을 지우는 메소드를 실행시켰다.

다른풀이(강사님)

addAll(Collection c); 하면 컬렉션에 컬렉션을 담을 수 있다.
set으로 먼저 중복을 제거한 후 리스트에 담았다.
removeIf를 사용하면 true면 그 값을 지운다.
list1.removeIf(e-> set2.contains(e));
하면 set2에 e가 있으면 true이다. 있으면 removeif해서 list1에서 지운다.

public static List<List<Integer>> findDifference(int[] nums1, int[] nums2) {
    // 코드 작성
    Set<Integer> set1 = new HashSet<>();
    Set<Integer> set2 = new HashSet<>();

    for (int num : nums1) {
        set1.add(num);
    }

    for (int num : nums2) {
        set2.add(num);
    }

    List<Integer> list1 = new ArrayList<>();
    List<Integer> list2 = new ArrayList<>();

    list1.addAll(set1);
    list2.addAll(set2);

    list1.removeIf(e-> set2.contains(e));
    list2.removeIf(e-> set1.contains(e));

    return List.of(list1, list2);
}