반응형
집합(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 |