두 집합의 교집합이란?
이 글에서는 자바(Java)를 사용해 두 집합(Set)의 교집합을 계산하는 방법을 소개합니다. Set은 중복 요소를 허용하지 않는 컬렉션(Collection)으로, 수학의 집합 개념을 프로그래밍으로 구현한 인터페이스입니다. Set 인터페이스는 Collection으로부터 상속받은 메서드만을 포함하며, 여기에 중복 요소 저장을 금지하는 규칙이 추가되어 있습니다.
교집합을 구하는 핵심은 retainAll() 메서드입니다. 이 메서드는 현재 집합에서 지정한 집합에 포함되지 않은 요소를 모두 제거하므로, 실행 결과로 두 집합의 공통 요소만 남게 됩니다.
입력값
첫 번째 집합: [40, 45]
두 번째 집합: [50, 45]
기대 출력값
두 집합의 교집합: [45]
알고리즘
Step 1 - 시작
Step 2 - 필요한 변수를 선언합니다.
Step 3 - 값을 정의합니다.
Step 4 - 두 개의 Set을 생성하고 'add' 메서드로 요소를 추가합니다.
Step 5 - 생성된 집합을 콘솔에 출력합니다.
Step 6 - 'retainAll' 메서드를 사용해 두 집합의 교집합을 계산합니다.
Step 7 - 두 집합의 교집합(공통 고유 요소)을 콘솔에 출력합니다.
Step 8 - 종료
예제 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(40);
input_set_1.add(45);
System.out.println("첫 번째 집합: " + input_set_1);
Set<Integer> input_set_2 = new HashSet<>();
input_set_2.add(45);
input_set_2.add(50);
System.out.println("두 번째 집합: " + input_set_2);
input_set_2.retainAll(input_set_1);
System.out.println("\n두 집합의 교집합: " + input_set_2);
}
}
실행 결과
필요한 패키지가 임포트되었습니다
첫 번째 집합: [40, 45]
두 번째 집합: [50, 45]
두 집합의 교집합: [45]
예제 2: 객체 지향 방식으로 구현하기
다음 예제는 연산 로직을 별도의 메서드로 분리하여 객체 지향 프로그래밍 스타일로 구현한 것입니다. 코드의 재사용성과 가독성이 향상됩니다.
import java.util.HashSet;
import java.util.Set;
public class Demo {
static void set_intersection(Set<Integer> input_set_1, Set<Integer> input_set_2){
input_set_2.retainAll(input_set_1);
System.out.println("\n두 집합의 교집합: " + input_set_2);
}
public static void main(String[] args) {
System.out.println("필요한 패키지가 임포트되었습니다");
Set<Integer> input_set_1 = new HashSet<>();
input_set_1.add(40);
input_set_1.add(45);
System.out.println("첫 번째 집합: " + input_set_1);
Set<Integer> input_set_2 = new HashSet<>();
input_set_2.add(45);
input_set_2.add(50);
System.out.println("두 번째 집합: " + input_set_2);
set_intersection(input_set_1, input_set_2);
}
}
실행 결과
필요한 패키지가 임포트되었습니다
첫 번째 집합: [40, 45]
두 번째 집합: [50, 45]
두 집합의 교집합: [45]
정리
자바에서 두 집합의 교집합을 구하는 가장 간단한 방법은 retainAll() 메서드를 활용하는 것입니다. 다만 이 메서드는 원본 집합을 직접 수정한다는 점에 유의해야 합니다. 원본 데이터를 그대로 유지해야 하는 경우에는 미리 복사본을 만든 뒤 교집합 연산을 수행하는 것이 좋습니다.