개발하는 두더지

[프로그래머스] 행렬의 곱셈 본문

알고리즘

[프로그래머스] 행렬의 곱셈

덜지 2018. 4. 20. 16:49


행렬의 곱셈 Level 2

행렬의 곱셈은, 곱하려는 두 행렬의 어떤 행과 열을 기준으로, 좌측의 행렬은 해당되는 행, 우측의 행렬은 해당되는 열을 순서대로 곱한 값을 더한 값이 들어갑니다. 행렬을 곱하기 위해선 좌측 행렬의 열의 개수와 우측 행렬의 행의 개수가 같아야 합니다. 곱할 수 있는 두 행렬 A,B가 주어질 때, 행렬을 곱한 값을 출력하는 productMatrix 함수를 완성해 보세요.



소스

package com.example.lib;

public class myClass {

/**
* A가 5 X 5
* B가 5 X 4
* Output은 5 X 4
* A[0][x] * B[x][0] x를 0~4까지 더한 값이 Output[0][0]
* A[0][x] * B[x][1] x를 0~4까지 더한 값이 Output[0][1]
*
* @param A matrix A
* @param B matrix B
* @return
*/
public int[][] productMatrix(int[][] A, int[][] B) {
int[][] answer = null;
int r = A.length;
int aC = A[0].length;
int bC = B[0].length;

answer = new int[r][bC];
// 시간복잡도 O(N^3)
for(int i = 0; i < r; i++) {
for(int j = 0; j < bC; j++) {
for(int k = 0; k < aC; k++) {
answer[i][j] += A[i][k] * B[k][j];
}
}
}

return answer;
}

public static void main(String[] args) {
myClass mc = new myClass();
int[][] a = { {6, 4, 6, 3, 9}, { 1, 7, 10, 9, 10 }, {9, 6, 6, 5, 5 }
, {2, 1, 10, 1, 5}, {3, 10, 2, 8, 10}};
int[][] b = { {7, 5, 5, 2 }, {6, 8, 5, 2 }, {4, 2, 5, 5},
{7, 5, 9, 5 }, {6, 8, 1, 3} };
mc.productMatrix(a, b);
}
}


참고

 프로그래머스 행렬의 곱셈 문제풀러가기

Comments