본문 바로가기
자바(Java)

두 행렬의 합집합을 찾는 자바 프로그램

by 코딩하는 욤욤이 2024. 11. 12.
반응형

1. 문제 이해하기

두 행렬의 합집합을 구한다는 것은 각 행렬의 모든 고유한(중복 없는) 요소를 하나의 리스트나 배열로 모은다는 뜻입니다. 예를 들어, 다음과 같은 두 행렬이 있다고 가정해봅시다.

matrix1 = {
  {1, 2, 3},
  {4, 5, 6}
}

matrix2 = {
  {4, 5, 6},
  {7, 8, 9}
}

이 두 행렬의 합집합은 {1, 2, 3, 4, 5, 6, 7, 8, 9}입니다. 각 행렬의 모든 요소를 모으되, 중복 요소는 하나로 유지합니다.

2. 자바의 HashSet 사용 이해하기

합집합을 구할 때 중복을 제거해야 하므로, HashSet을 사용하면 중복된 요소를 자동으로 제거할 수 있습니다. HashSet에 두 행렬의 모든 요소를 추가한 후 이를 배열로 변환하여 합집합 결과를 만들 수 있습니다.

3. 프로그램 설계

다음은 프로그램을 구현하는 단계입니다.

  1. 두 개의 행렬을 정의합니다.
  2. HashSet을 생성하여 두 행렬의 모든 요소를 추가합니다.
  3. HashSet을 배열로 변환하여 결과를 반환합니다.

4. 예제 코드 작성하기

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

public class UnionOfMatrices {

    public static int[] findUnion(int[][] matrix1, int[][] matrix2) {
        // 1. HashSet을 사용하여 두 행렬의 고유한 값들을 저장할 공간 생성
        HashSet<Integer> unionSet = new HashSet<>();
        
        // 2. 첫 번째 행렬의 모든 요소를 HashSet에 추가
        for (int[] row : matrix1) {
            for (int num : row) {
                unionSet.add(num);
            }
        }
        
        // 3. 두 번째 행렬의 모든 요소를 HashSet에 추가
        for (int[] row : matrix2) {
            for (int num : row) {
                unionSet.add(num);
            }
        }
        
        // 4. HashSet을 배열로 변환
        int[] unionArray = new int[unionSet.size()];
        int index = 0;
        for (int num : unionSet) {
            unionArray[index++] = num;
        }
        
        return unionArray;
    }

    public static void main(String[] args) {
        int[][] matrix1 = {
            {1, 2, 3},
            {4, 5, 6}
        };
        
        int[][] matrix2 = {
            {4, 5, 6},
            {7, 8, 9}
        };
        
        // 합집합 배열 찾기
        int[] unionArray = findUnion(matrix1, matrix2);
        
        // 결과 출력
        System.out.println("합집합: " + Arrays.toString(unionArray));
    }
}

5. 코드 설명

  1. HashSet<Integer> unionSet = new HashSet<>();
    HashSet을 생성하여 unionSet이라는 이름을 붙였습니다. 이 HashSet은 고유한 값만 저장하므로 중복된 값을 자동으로 제거합니다.
  2. 첫 번째 행렬의 모든 요소를 HashSet에 추가하기
    이중 for 문을 사용하여 첫 번째 행렬 matrix1의 모든 요소를 unionSet에 추가합니다.
  3. 두 번째 행렬의 모든 요소를 HashSet에 추가하기
    동일한 방식으로 matrix2의 모든 요소도 unionSet에 추가합니다. 이 과정에서 중복된 값은 자동으로 제거됩니다.
  4. HashSet을 배열로 변환하기
    HashSet의 결과를 배열로 변환하기 위해 int[] unionArray = new int[unionSet.size()];를 선언합니다. 이후 for 문을 사용하여 unionSet의 각 요소를 unionArray에 넣습니다.
  5. 결과 출력
    Arrays.toString(unionArray)를 사용해 합집합 배열을 문자열 형태로 변환하여 출력합니다.

6. 실행 결과

위 예제 코드에서 matrix1 = {{1, 2, 3}, {4, 5, 6}}과 matrix2 = {{4, 5, 6}, {7, 8, 9}}을 사용하면 다음과 같은 출력이 나타납니다.

합집합: [1, 2, 3, 4, 5, 6, 7, 8, 9]

7. 요약

이 프로그램은 두 행렬의 모든 고유한 요소를 하나의 배열로 합치는 방법을 보여줍니다. HashSet을 활용하면 중복 요소를 쉽게 제거할 수 있어, 합집합을 구할 때 유용합니다.

반응형