집합

집합 (Set)

특정 조건에 맞는 원소들의 모임
집합 표현 방법
원소나열법
A = {1, 2, 3, 4, 5}, B = {2, 4, 6, 8, 10}
조건제시법
A = {A | A는 정수, 1 ≦ A ≦ 5}, B = {2B | B는 정수, 1 ≦ B ≦ 5}
벤 다이어그램

교집합

두 집합이 공통으로 포함하는 원소로 이루어진 집합 → 𝐴∩𝐵={𝑥 | 𝑥∈𝐴 𝑎𝑛𝑑 𝑥∈𝐵}

합집합

어느 하나에라도 속하는 원소들을 모두 모은 집합 → 𝐴∪𝐵={𝑥 | 𝑥∈𝐴 𝑜𝑟 𝑥∈𝐵}

차집합

A(or B)에만 속하는 원소들의 집합 → 𝐴−𝐵={𝑥 | 𝑥∈𝐴 𝑎𝑛𝑑 𝑥∉𝐵}

여집합

전체집합(U) 중 A의 원소가 아닌 것들의 집합 → 𝐴^𝑐={𝑥 | 𝑥∈𝑈 𝑎𝑛𝑑 𝑥∉𝐴}

import java.util.Arrays;
import java.util.HashSet;

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

     //1.   자바에서 집합 사용 - HashSet
        System.out.println("== HashSet ==");
        HashSet set1 = new HashSet();
        set1.add(1);
        set1.add(1);
        set1.add(1);
        System.out.println("set1 = " + set1);
        set1.add(2);
        set1.add(3);
        System.out.println("set1 = " + set1);
        set1.remove(1);
        System.out.println("set1 = " + set1);
        System.out.println(set1.size());
        System.out.println(set1.contains(2));

        //2.    집합연산
        System.out.println("== 집합 연산 ==");

        //2-1.  교집합
        HashSet a = new HashSet(Arrays.asList(1,2,3,4,5));
        HashSet b = new HashSet(Arrays.asList(2,4,6,8,10));
        a.retainAll(b);  //교집합이 계산되서 a에는 b와의 교집합 원소만 남음.
        System.out.println("교집합: " + a);

        //2-2   합집합
        a.addAll(b);
        System.out.println("합집합: " + a);

        //2-3.  차집합
        a.removeAll(b);
        System.out.println("차집합: " + a);
    }
}
== HashSet ==
set1 = [1]
set1 = [1, 2, 3]
set1 = [2, 3]
2
true
== 집합 연산 ==
교집합: [2, 4]
합집합: [2, 4, 6, 8, 10]
차집합: []
import java.util.ArrayList;
import java.util.HashSet;

//ArrayList를 사용한 집합 구현 실습 (집합 관련 연산 사용 X)

class MySet {
    //ArrayList
    ArrayList<Integer> list;

    //생성자1
    MySet() {
        this.list = new ArrayList<Integer>();
    }

    //생성자2
    MySet(int[] arr) {
        this.list = new ArrayList<Integer>();

        for (int item : arr) {
            this.list.add(item);
        }
    }

    //원소 추가(중복 X)
    public void add(int x) {
        for (int item : this.list) {
            if (item == x) {
                return;
            }
        }
        this.list.add(x);
    }

    //교집합
    public MySet retainAll(MySet b) {
        MySet result = new MySet();

        for (int itemA : this.list) {
            for (int itemB : b.list) {
                if (itemA == itemB) {
                    result.add(itemA);
                }
            }
        }
        return result;
    }

    //합집합
    public MySet addAll(MySet b) {
        MySet result = new MySet();

        for (int itemA : this.list) {
            result.add(itemA);
        }

        for (int itemB : b.list) {
            result.add(itemB);
        }
        return result;
    }

    //차집합
    public MySet removeAll(MySet b) {
        MySet result = new MySet();

        for (int itemA : this.list) {
            boolean containFlag = false;
            for (int itemB : b.list) {
                if (itemA == itemB) {
                    containFlag = true;
                    break;
                }
            }
            if (!containFlag) {
                result.add(itemA);
            }
        }
        return result;
    }
}

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

        //Test Code
        MySet a = new MySet();
        a.add(1);
        a.add(1);
        a.add(1);
        System.out.println("a = " + a.list);
        a.add(2);
        a.add(3);
        System.out.println("a = " + a.list);

        a = new MySet(new int[]{1,2,3,4,5,});
        MySet b = new MySet(new int[]{2,4,6,8,10});
        System.out.println("a: " + a.list);
        System.out.println("b: " + b.list);

        MySet result = a.retainAll(b);
        System.out.println("교집합: " + result.list);

        result = a.addAll(b);
        System.out.println("합집합: " + result.list);

        result = a.removeAll(b);
        System.out.println("차집합: " + result.list);
    }
}
a = [1]
a = [1, 2, 3]
a: [1, 2, 3, 4, 5]
b: [2, 4, 6, 8, 10]
교집합: [2, 4]
합집합: [1, 2, 3, 4, 5, 6, 8, 10]
차집합: [1, 3, 5]

출처 : 제로베이스

Leave a comment