반응형
● Array를 이용한 행렬의 계산 코드
1) 행렬의 곱셈 조건
행렬의 곱셈에 대해 간단히 알아야 할 규칙
A =(axb) , B=(bxc)
AB = (axc)
2) 코드구상
행렬을 담을 배열을 선언&생성하자
int[][] m1 = { // 2x3 행렬
{1,2,3},
{4,5,6}
};
int[][] m2 = { // 3x2 행렬
{1,2},
{3,4},
{5,6}
};
final int ROW = m1.length; // 행렬의 연산결과로 생긴 행의 길이
final int COL = m2[0].length; // 열의 길이
int[][] m3 = new int[ROW][COL]; //연산의 결과가 들어갈 배열
결과값 행렬 AB = (axc) 의 값을 출력하기 위해 (행의 길이-1)번의 연산을 (열의 길이-1)번 만큼해주어야 한다.
적어도 2개이상의 for문을 필요로 함 정확한 코드구상을 위해 손으로 써보자
가로로 m3의 한행을 출력시키는 코드를 구상하고 이러한 행렬의 곱셈을 반복할 for문을 구상해보자
역시 머리만으론 힘드므로 펜과 종이를 이용하면
m3의 한행을 계산하는 과정중 3가지의 변수를 발견할 수 있다. 검은색 빨간색 파란색의 변수를 통제하기 위하여
3개의 for문을 사용하였다. 앞으로도 for문을 사용하기 위해선 몇번의 for문을 써야할지는 변수가 몇개인지 확인해보자!
public class MultiArrEx03 {
public static void main(String[] args) {
int[][] m1 = {
{1,2,3},
{4,5,6}
};
int[][] m2 = {
{1,2},
{3,4},
{5,6}
};
final int ROW = m1.length;
final int COL = m2[0].length;
final int M2_ROW = m2.length;
int[][] m3 = new int[ROW][COL];
for(int i=0;i<ROW;i++)
for(int j=0;j<COL;j++)
for(int k=0;k<M2_ROW;k++)
m3[i][j] += m1[i][k] * m2[k][j];
for(int i=0;i<ROW;i++) {
for(int j=0;j<COL;j++) {
System.out.printf("%3d",m3[i][j]);
}
System.out.println();
}
}
}
'Java > Daily-Java' 카테고리의 다른 글
[Array] 2차원 배열의 90도 회전 (0) | 2021.04.20 |
---|---|
[Array] 동전 거슬러주기 _ Part 2 (응용) (0) | 2021.04.15 |
[Array] 동전 거슬러주기 _ Part 1 (0) | 2021.04.15 |
[Array] 배열을 응용한 " * " 출력 예제 (0) | 2021.04.13 |
[Array] 2차원 배열 응용 (0) | 2021.04.13 |