반응형
두 행렬의 곱셈을 수행하는 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로 두 행렬의 곱셈을 구현하는 방법을 알아보겠습니다.
프로그램 흐름
- 행렬 입력받기: 사용자로부터 두 행렬의 크기와 원소들을 입력받습니다.
- 곱셈 조건 확인: 행렬 A의 열 개수와 B의 행 개수가 같은지 확인합니다.
- 곱셈 수행: 각 원소를 곱한 후 더해서 결과 행렬에 저장합니다.
- 결과 출력: 최종 곱셈 결과를 출력합니다.
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();
}
}
코드 상세 설명
- 입력받기:
- rowsA와 colsA는 첫 번째 행렬의 행과 열 개수입니다.
- rowsB와 colsB는 두 번째 행렬의 행과 열 개수입니다.
- 사용자로부터 각 행렬의 크기와 원소들을 입력받습니다.
- 조건 확인:
- 첫 번째 행렬의 열 개수(colsA)와 두 번째 행렬의 행 개수(rowsB)가 같지 않으면 곱셈이 불가능합니다. 이 경우 프로그램이 종료됩니다.
- 행렬 곱셈 수행:
- resultMatrix는 결과 행렬입니다. resultMatrix[i][j]는 A의 i번째 행과 B의 j번째 열을 곱하고 더한 값으로 계산됩니다.
- for 루프를 통해 각 원소를 계산하며, 내부 루프에서 각 원소를 곱하고 더하는 작업을 수행합니다.
- 결과 출력:
- 계산이 완료된 후 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에서 행렬 곱셈을 이해하고 구현할 수 있습니다.
반응형
'자바(Java)' 카테고리의 다른 글
행렬의 전치를 찾는 Java 프로그램 쉽게 이해하기 (2) | 2024.11.15 |
---|---|
버블 정렬 Java 프로그램 쉽게 이해하기 (1) | 2024.11.14 |
두 행렬의 합집합을 찾는 자바 프로그램 (0) | 2024.11.12 |
두 배열의 합집합을 찾는 자바 프로그램 (0) | 2024.11.11 |
배열에서 가장 작은 요소와 가장 큰 요소를 찾는 Java 프로그램 (1) | 2024.11.10 |