집합

2022. 6. 10. 18:01수학/기초 수학

목표: 집합에 대해 이해하고, 자바로 집합을 구현한다. 

1. 집합

2. 교집합

3. 합집합

4. 차집합

5. 여집합

 

집합(set) : 특정 조건에 맞는 원소들의 모임

표현 방법

1. 원소 나열법

2. 조건 제시법

3. 벤다이어그램

 

교집합: 두 집합이 공통으로 포함하는 원소로 이루어진 집합

 

 

합집합: 두 집합 어느 하나라도 속하는 원소로 이루어진 집합

 

차집합: A(or B)에만 속하는 원소들의 집합

 

여집합: 전체집합(U) 중 A와 B의 원소가 아닌 원소들의 집합

 

 

Java - HashSet을 이용하여 집합 연습해보기

// 기초 수학 - 집합

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

public class Main {
	public static void main(String[] args) {
		//1. w자바에서 집합 사용 - HashSet
		System.out.println("== HashSet ==");
		HashSet set1 = new HashSet();
		set1.add(1);	// set은 데이터가 중복 해서 들어가지지 않음
		set1.add(1);
		set1.add(1);
		System.out.println("set1 = " + set1);	// 따라서 [1]출력
		set1.add(2);
		set1.add(3);
		System.out.println("set1 = " + set1);	//데이터가 중복이 아니므로 2 3 들어감
		set1.remove(1); // 값 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에는 교집합원소만 남음
//		System.out.println("교집합: " + a );
//		// 결과 > 교집합: [2, 4]

//		// 2-2. 합집합
//		a.addAll(b);
//		System.out.println("합집합: " + a); //합집합 계산, a에는 b의 원소가 전부 들어감
//		// 결과 -> 합집합: [1, 2, 3, 4, 5, 6, 8, 10]
		
//		// 2-3. 차집합
//		a.removeAll(b);
//		System.out.println("차집합: " + a);
//		// 결과 -> 차집합: [1, 3, 5]
		
		
		
	}

}

 

Java - HashSet을 사용하지 않고 집합 구현하기

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

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) {
		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 Pjactice {
	public static void main(String[] args) {
		MySet a = new MySet();
		a.add(1);
//		a.add(1);
//		a.add(1);
		System.out.println(a.list);
		a.add(2);
		a.add(3);
		System.out.println(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);
		
	}

}

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

순열과 조합을 이용한 함수의 개수  (0) 2022.05.01