(JAVA) 행렬의 곱셈 - 프로그래머스

delay.Dev·2020년 9월 15일
1

프로그래머스

목록 보기
7/13
post-thumbnail

프로그래머스 - 행렬의 곱셈 문제 링크

[문제]

문제 설명

2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.

제한 사항

  • 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
  • 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
  • 곱할 수 있는 배열만 주어집니다.

입출력 예

arr1arr2return
[143241]\begin{bmatrix} 1 & 4 \\ 3 & 2 \\ 4 & 1 \end{bmatrix}[3333]\begin{bmatrix} 3 & 3 \\ 3 & 3 \end{bmatrix}[151515151515]\begin{bmatrix} 15 & 15 \\ 15 & 15 \\ 15 & 15 \end{bmatrix}
[232424314]\begin{bmatrix} 2 & 3 & 2\\ 4&2&4 \\ 3&1&4 \end{bmatrix}[543241311]\begin{bmatrix} 5&4&3 \\ 2&4&1 \\ 3&1&1 \end{bmatrix}[222211362818292014]\begin{bmatrix} 22&22&11 \\ 36&28&18 \\ 29&20&14 \end{bmatrix}

[풀이]

해설

이 문제는 행렬의 곱셈 식만 알고 있다면 쉽게 풀 수 있는 문제이다.
단, for문에서 해당되는 인자값(i, j, n)을 헷갈리지 않는 것이 제일 중요하다.
행렬의 곱셈식은 참고 사항에 있다

코드

    public int[][] solution(int[][] arr1, int[][] arr2) {
        int[][] answer = new int[arr1.length][arr2[0].length];

        for (int i = 0; i < arr1.length; i++)
            for (int j = 0; j < arr2[0].length; j++)
                for (int n = 0; n < arr1[0].length; n++)
                    answer[i][j] += (arr1[i][n] * arr2[n][j]);

        return answer;
    }

참고(행렬의 곱셈식)

행렬 A(mXn) 행렬 B(nXp) = 행렬 S(mXp)
SijS_{ij} = A1iA_{1i}
Bj1B_{j1} + A2iA_{2i}Bj2B_{j2} + ⋯ + AniA_{ni}Bn2B_{n2} = k=1n\displaystyle\sum_{k=1}^n AkiA_{ki}BjkB_{jk}

1개의 댓글

comment-user-thumbnail
2021년 3월 25일

첫 줄의 public 뒤의 int[][]의 역할은 뭔가요?
타입 선언인가요?

답글 달기