집합
집합 (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