이 글에서는 자바(Java)를 사용하여 한 집합(Set)이 다른 집합의 부분집합(subset)인지 확인하는 방법을 알아봅니다.
Set은 중복 요소를 허용하지 않는 컬렉션(Collection)으로, 수학의 집합 개념을 프로그래밍으로 구현한 것입니다. Set 인터페이스는 Collection에서 상속받은 메서드만을 포함하며, 중복 요소 저장을 금지한다는 제약 조건이 추가되어 있습니다.
부분집합 여부는 containsAll() 메서드를 통해 간단하게 확인할 수 있습니다. 이 메서드는 대상 집합이 다른 집합의 모든 요소를 포함하고 있는지 검사하여 boolean 값을 반환합니다.
동작 예시
예를 들어 다음과 같은 입력이 주어졌을 때 −
첫 번째 집합: [90, 75, 60, 45] 두 번째 집합: [90, 60]
원하는 출력 결과는 다음과 같습니다 −
한 집합이 다른 집합의 부분집합인가요? true
알고리즘
1단계 - 시작 2단계 - 필요한 변수를 선언합니다. 3단계 - 값을 정의합니다. 4단계 - 두 개의 Set을 생성하고 'add' 메서드로 요소를 추가합니다. 5단계 - 콘솔에 두 집합을 출력합니다. 6단계 - Boolean 변수를 생성하고, 한 집합에 대해 'containsAll' 메서드를 호출합니다. 7단계 - 이 메서드가 한 집합이 다른 집합의 부분집합인지 검사합니다. 8단계 - 부분집합이면 true, 아니면 false를 반환합니다. 9단계 - 결과를 콘솔에 출력합니다. 10단계 - 종료
예제 1: main 함수에서 모든 작업 수행
아래 예제에서는 모든 연산을 main 함수 안에서 한 번에 처리합니다.
import java.util.HashSet;
import java.util.Set;
public class Demo {
public static void main(String[] args) {
System.out.println("필요한 패키지를 가져왔습니다");
Set<Integer> input_set_1 = new HashSet<>();
input_set_1.add(45);
input_set_1.add(60);
input_set_1.add(75);
input_set_1.add(90);
System.out.println("첫 번째 집합: " + input_set_1);
Set<Integer> input_set_2 = new HashSet<>();
input_set_2.add(60);
input_set_2.add(90);
System.out.println("두 번째 집합: " + input_set_2);
boolean result = input_set_1.containsAll(input_set_2);
System.out.println("\n한 집합이 다른 집합의 부분집합인가요? \n" + result);
}
}출력 결과
필요한 패키지를 가져왔습니다 첫 번째 집합: [90, 75, 60, 45] 두 번째 집합: [90, 60] 한 집합이 다른 집합의 부분집합인가요? true
예제 2: 객체 지향 방식으로 함수 분리
아래 예제에서는 객체 지향 프로그래밍(OOP) 스타일에 맞게 연산 로직을 별도의 함수로 캡슐화합니다.
import java.util.HashSet;
import java.util.Set;
public class Demo {
static void is_subset(Set<Integer> input_set_1, Set<Integer> input_set_2){
boolean result = input_set_1.containsAll(input_set_2);
System.out.println("\n한 집합이 다른 집합의 부분집합인가요? \n" + result);
}
public static void main(String[] args) {
System.out.println("필요한 패키지를 가져왔습니다");
Set<Integer> input_set_1 = new HashSet<>();
input_set_1.add(45);
input_set_1.add(60);
input_set_1.add(75);
input_set_1.add(90);
System.out.println("첫 번째 집합: " + input_set_1);
Set<Integer> input_set_2 = new HashSet<>();
input_set_2.add(60);
input_set_2.add(90);
System.out.println("두 번째 집합: " + input_set_2);
is_subset(input_set_1, input_set_2);
}
}출력 결과
필요한 패키지를 가져왔습니다 첫 번째 집합: [90, 75, 60, 45] 두 번째 집합: [90, 60] 한 집합이 다른 집합의 부분집합인가요? true
정리
자바에서 집합 간의 포함 관계를 확인할 때는 containsAll() 메서드가 가장 간편한 방법입니다. 첫 번째 집합에 대해 input_set_1.containsAll(input_set_2)를 호출하면, 두 번째 집합의 모든 요소가 첫 번째 집합에 포함되어 있을 경우 true를 반환하므로 부분집합 여부를 손쉽게 판별할 수 있습니다.