728x90
설계
- 행렬 내적은 두 개의 행렬을 곱하는 연산으로, 주어진 두 행렬 A와 B가 있을 때, 결과 행렬 C를 계산하는 방법이다. 이때 A의 열의 수와 B의 행의 수가 일치해야 한다.
- 먼저, 주어진 두 행렬 A와 B가 다음과 같다고 가정해 본다면,
- 결과 행렬 C는 m x p 크기를 가지게 된다.
- 행렬 C의 각 원소 cij는 다음과 같이 계산된다.
- 코드에서는 이러한 원리를 기반으로 중첩된 반복문을 사용하여 각 원소를 계산하고 결과 배열 C에 저장. 각 원소 cij는 A의 행 i1과 B의 열 j2를 곱한 값들을 모두 더한 값이 된다.
구현
코드
import java.util.*;
class Solution {
public int[][] solution(int[][] arr1, int[][] arr2) {
// 배열1의 행과 열 크기 구하기
int row1 = arr1.length; // 배열1의 행 수
int col1 = arr1[0].length; // 배열1의 열 수
System.out.println("배열1 행 : " + row1);
System.out.println("배열1 열 : " + col1);
for (int[] r : arr1) {
System.out.println(Arrays.toString(r));
}
// 배열2의 행과 열 크기 구하기
int row2 = arr2.length; // 배열2의 행 수
int col2 = arr2[0].length; // 배열2의 열 수
System.out.println("배열2 행 : " + row2);
System.out.println("배열2 열 : " + col2);
for (int[] r : arr2) {
System.out.println(Arrays.toString(r));
}
// 결과를 저장할 새로운 배열 생성
// 행렬 곱셈 결과는 배열1의 행과 배열2의 열 크기를 가집니다.
int[][] answer = new int[row1][col2];
// 각 행렬 요소의 곱셈과 덧셈을 계산
for (int r1 = 0; r1 < row1; r1++) {
for (int c2 = 0; c2 < col2; c2++) {
int sum = 0; // 두 행렬의 곱셈 결과를 누적할 변수
// 행렬 곱셈 수행
for (int v = 0; v < col1; v++) {
sum += arr1[r1][v] * arr2[v][c2];
}
// 결과를 새로운 배열에 저장
answer[r1][c2] = sum;
}
}
for (int[] r : answer) {
System.out.println(Arrays.toString(r));
}
// 결과 배열 반환
return answer;
}
}
'Problem_Solving' 카테고리의 다른 글
프로그래머스 : 삼각 달팽이 (자바, JAVA) (1) | 2023.12.25 |
---|---|
백준(BOJ) 16945 : 매직 스퀘어로 변경하기 (자바, JAVA) (0) | 2023.12.25 |
프로그래머스 : 모의고사 (자바, JAVA) (0) | 2023.12.24 |
백준(BOJ) 3052 : 나머지 (자바, JAVA) (0) | 2023.12.24 |
백준(BOJ) 16561 : 3의 배수 (자바, JAVA) (0) | 2023.12.24 |