본문 바로가기
자바(Java)

두 행렬의 곱셈을 위한 Java 프로그램

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

두 행렬의 곱셈을 수행하는 Java 프로그램을 이해하려면, 먼저 행렬 곱셈의 기본 개념을 알아야 합니다. 그 후, Java 코드 작성 방법을 단계별로 살펴보겠습니다.

 

1. 행렬 곱셈이란?

행렬 곱셈은 두 개의 행렬이 주어졌을 때, 그 결과로 새로운 행렬을 만드는 연산입니다. 두 행렬 A와 B가 있다고 할 때:

  • A의 열의 개수와 B의 행의 개수가 같아야 곱셈이 가능합니다.
  • 결과 행렬 C의 크기는 A의 행 개수와 B의 열 개수로 결정됩니다.

예시

행렬 A가 2x3 행렬이고 행렬 B가 3x2 행렬인 경우:

A = [a11 a12 a13]
    [a21 a22 a23]

B = [b11 b12]
    [b21 b22]
    [b31 b32]

결과 행렬 C의 각 원소 C[i][j]는 A의 i번째 행과 B의 j번째 열에 해당하는 원소들을 곱해서 더한 값입니다. 즉, C[0][0] = a11 * b11 + a12 * b21 + a13 * b31가 됩니다.

 

2. Java로 행렬 곱셈 구현하기

이제 Java로 두 행렬의 곱셈을 구현하는 방법을 알아보겠습니다.

프로그램 흐름

  1. 행렬 입력받기: 사용자로부터 두 행렬의 크기와 원소들을 입력받습니다.
  2. 곱셈 조건 확인: 행렬 A의 열 개수와 B의 행 개수가 같은지 확인합니다.
  3. 곱셈 수행: 각 원소를 곱한 후 더해서 결과 행렬에 저장합니다.
  4. 결과 출력: 최종 곱셈 결과를 출력합니다.

3. Java 코드 설명

아래는 두 행렬을 곱하는 Java 프로그램의 코드입니다.

import java.util.Scanner;

public class MatrixMultiplication {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 첫 번째 행렬의 크기 입력 받기
        System.out.print("첫 번째 행렬의 행 수 입력: ");
        int rowsA = scanner.nextInt();
        System.out.print("첫 번째 행렬의 열 수 입력: ");
        int colsA = scanner.nextInt();

        // 두 번째 행렬의 크기 입력 받기
        System.out.print("두 번째 행렬의 행 수 입력: ");
        int rowsB = scanner.nextInt();
        System.out.print("두 번째 행렬의 열 수 입력: ");
        int colsB = scanner.nextInt();

        // 행렬 곱셈 조건 확인
        if (colsA != rowsB) {
            System.out.println("첫 번째 행렬의 열 수와 두 번째 행렬의 행 수가 같아야 합니다.");
            return;
        }

        // 첫 번째 행렬 입력
        int[][] matrixA = new int[rowsA][colsA];
        System.out.println("첫 번째 행렬의 원소를 입력하세요:");
        for (int i = 0; i < rowsA; i++) {
            for (int j = 0; j < colsA; j++) {
                matrixA[i][j] = scanner.nextInt();
            }
        }

        // 두 번째 행렬 입력
        int[][] matrixB = new int[rowsB][colsB];
        System.out.println("두 번째 행렬의 원소를 입력하세요:");
        for (int i = 0; i < rowsB; i++) {
            for (int j = 0; j < colsB; j++) {
                matrixB[i][j] = scanner.nextInt();
            }
        }

        // 결과 행렬 초기화
        int[][] resultMatrix = new int[rowsA][colsB];

        // 행렬 곱셈 수행
        for (int i = 0; i < rowsA; i++) {
            for (int j = 0; j < colsB; j++) {
                resultMatrix[i][j] = 0;
                for (int k = 0; k < colsA; k++) {
                    resultMatrix[i][j] += matrixA[i][k] * matrixB[k][j];
                }
            }
        }

        // 결과 행렬 출력
        System.out.println("행렬 곱셈 결과:");
        for (int i = 0; i < rowsA; i++) {
            for (int j = 0; j < colsB; j++) {
                System.out.print(resultMatrix[i][j] + " ");
            }
            System.out.println();
        }

        scanner.close();
    }
}

코드 상세 설명

  1. 입력받기:
    • rowsA와 colsA는 첫 번째 행렬의 행과 열 개수입니다.
    • rowsB와 colsB는 두 번째 행렬의 행과 열 개수입니다.
    • 사용자로부터 각 행렬의 크기와 원소들을 입력받습니다.
  2. 조건 확인:
    • 첫 번째 행렬의 열 개수(colsA)와 두 번째 행렬의 행 개수(rowsB)가 같지 않으면 곱셈이 불가능합니다. 이 경우 프로그램이 종료됩니다.
  3. 행렬 곱셈 수행:
    • resultMatrix는 결과 행렬입니다. resultMatrix[i][j]는 A의 i번째 행과 B의 j번째 열을 곱하고 더한 값으로 계산됩니다.
    • for 루프를 통해 각 원소를 계산하며, 내부 루프에서 각 원소를 곱하고 더하는 작업을 수행합니다.
  4. 결과 출력:
    • 계산이 완료된 후 resultMatrix의 원소들을 출력합니다.

4. 실행 예시

예를 들어, 다음과 같은 입력을 받을 수 있습니다.

  • 첫 번째 행렬 (2x3):
1 2 3
4 5 6
  • 두 번째 행렬 (3x2):
7 8
9 10
11 12

위와 같은 입력을 넣으면, 출력 결과는 다음과 같습니다.

첫 번째 행렬의 행 수 입력: 2
첫 번째 행렬의 열 수 입력: 3
두 번째 행렬의 행 수 입력: 3
두 번째 행렬의 열 수 입력: 2
첫 번째 행렬의 원소를 입력하세요:
1 2 3
4 5 6
두 번째 행렬의 원소를 입력하세요:
7 8
9 10
11 12
행렬 곱셈 결과:
58 64
139 154

5. 핵심 요약

  • 행렬 크기 확인: 행렬 A의 열 개수와 행렬 B의 행 개수가 같아야 곱셈이 가능합니다.
  • 결과 계산: 각 원소는 A의 행과 B의 열을 곱한 값의 합으로 계산됩니다.
  • 출력: 결과 행렬을 행렬 형태로 출력합니다.

이 프로그램을 통해 Java에서 행렬 곱셈을 이해하고 구현할 수 있습니다.

반응형