본문 바로가기
기초수학

집합(Set)이란?

by devnyang 2024. 2. 26.
반응형

집합(Set)


특정 조건에 맞는 원소들의 모임으로, 표현 방법으로는 원소나열법, 조건제시법, 벤다이어그램이 있다.

 

java에서 집합 사용시 HashSet을 이용한다.

HashSet set1 = new HashSet();
set1.add(1);   //값 추가
set1.add(1);
set1.add(1);
//중복은 하나만 들어감.

set1.add(2);
set1.add(3);
set1.remove(1);  //값 제거
set1.size();  // 크기
set1.contains(2);   // 값 포함 여부

 

원소나열법   A = {1, 2, 3, 4, 5}
조건제시법  A = {A|A는 정수, 1<= A <= 5}

벤다이어그램 : 서로 다른 집합들 사이의 관계를 나타내는 다이어그램.

 

 

교집합

두 집합이 공통으로 포함하는 원소로 이루어진 집합
A∩B = {x|x ∈ A and x ∈ B}

교집합

//      교집합
        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);   //b객체가 가지고 있는 요소를 제외한 나머지 전부 삭제
        //중복 요소가 있을 경우에는 중복 제거가 되지 않음.
        System.out.println("교집합: " + a);

 

 

합집합

어느 하나에라도 속하는 원소들을 모두 모은 집합
A∪B = {x|x ∈ A or x ∈ B}

합집합

//      합집합
        a.addAll(b);  //객체에 있는 아이템들을 리스트에 모두 추가. 중복 있을 경우엔 하나만.
        System.out.println("합집합: " + a);

 

 

차집합

A(or B)에만 속하는 원소들의 집합
A - B = {x|x ∈ A and x ∉ B}

차집합

//      차집합
        a.removeAll(b);  //b객체와 일치하는 adml 아이템들을 삭제
        System.out.println("차집합: " + a);

 

 

ArrayList를 사용한 집합구현

import java.sql.Array;
import java.util.ArrayList;

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) {  //HashSet과 다르게 a의 내용은 그대로 두고 교집합된 집합을 새로 반환
        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 Practice {
    public static void main(String[] args) {
    
        MySet a = new MySet();

        a.add(1);
        a.add(2);
        a.add(3);
        System.out.println(a.list);  //[1, 2, 3]

        a = new MySet(new int[]{1, 2, 3, 4, 5});
        MySet b = new MySet(new int[]{2, 4, 6, 8, 10});
        
        //교집합
        MySet result = a.retainAll(b);
        System.out.println(result.list);  //[2, 4]

        //합집합
        result = a.addAll(b);
        System.out.println(result.list);  //[1, 2, 3, 4, 5, 6, 8, 10]

        //차집합
        result = a.removeAll(b);
        System.out.println(result.list);  //[1, 3, 5]
    }
}

 

 

반응형

'기초수학' 카테고리의 다른 글

제곱과 로그  (0) 2024.02.27
점화식(Recurrence), 재귀함수  (0) 2024.02.27
조합 (Combination)  (0) 2024.02.27
순열(Permutation), 팩토리얼(Factorial)  (0) 2024.02.27
경우의 수 (합의 법칙, 곱의 법칙)  (0) 2024.02.26