문제를 읽어보면, 차집합을 구하는 문제이다.

전체 U, 과제를 낸 집단을 A 라 했을 때,

U - A 를 구하는 문제.

 

Stream 을 잘 다룰줄 몰라서, 챗 GPT 에게 물어보았다.

  1. 스트림 API와의 호환성: 스트림 API는 기본 자료형(primitive types)에 대한 연산을 수행할 수 있도록 여러 메소드를 제공합니다. 그러나 배열을 스트림으로 변환할 때 기본 자료형 배열은 직접적으로 스트림으로 변환할 수 없습니다. 따라서 boxed()를 사용하여 기본 자료형을 래퍼 클래스로 변환하면 스트림 API를 활용할 수 있습니다.

 

package org.example;

import java.util.*;
import java.util.function.Predicate;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int[] submitted = new int[28];
        int[] all = new int[30];

        for (int counter = 0; counter < 28; counter++) {
            submitted[counter] = sc.nextInt();
        }

        for (int counter = 0; counter < 30; counter++) {
            all[counter] = counter + 1;
        }

        List<Integer> allList = Arrays.stream(all)
                .boxed()
                .collect(Collectors.toList());

        List<Integer> difference = new ArrayList<>(allList);
        difference.removeAll(Arrays.stream(submitted)
                .boxed()
                .collect(Collectors.toList()));

        for (int print : difference) {
            System.out.println("x: " + print);
        }
    }
}

List<Integer> allList = ...

Arrays.stream(all) 은 int[] 타입의 all 을 스트림으로 변환한다.

컬렉션API 를 사용하려면, Primitive 타입은 다룰수가 없기에 Wrapper Class 로 변환해준다. 

이것을 박싱이라고 표현한다.

그 것을 처리해주는 메서드가 boxed()이다. 

 

List<Integer> difference = ...

Arrays.stream(submitted) 는 int[] 타입 submitted 를 스트림으로 변환한다.

그다음 래퍼클래스로 박싱해준다. 

마지막으로 difference (all) 에서 removeAll() 을 사용하여, 괄호안의 요소를 제거할 수 있다.