Загружаем каталог…
Загружаем каталог…
문제: 행렬의 곱셈 < 수학적 지식 > 이 문제는 풀이보다 행렬의 곱셈이 어떻게 이루어지는지 짚고 넘어갈 필요가 있다. 예전에 배웠지만 가물가물해서, 다시 공부하며 기록한다. 행렬의 곱셈이란? 앞 행렬의 행 과 뒤 행렬의 열 을 같은 위치끼리 곱한 뒤 모두 더한다. 곱할 수 있는 조건 A가 m × n , B가 n × p 일 때, A의 열 개수 와 B의 행 개수 가 같아야 곱할 수 있고, 결과는 m × p 가 된다. (2 × 3) × (3 × 2) = (2 × 2) 다만 이 문제는 아래처럼 곱할 수 있는 행렬만 주어진다. 그래서 크기 검사는 생략하고, 곱셈 계산에만 집중한다. 계산 방법 결과의 i 행 j 열 값은 A의 i 행과 B의 j 열을 같은 위치끼리 곱해서 더한 값이다. A = | 1 2 3 | B = | 7 8 | | 4 5 6 | | 9 10 | | 11 12 | C[0][0] = A의 0행 · B의 0열 = 1×7 + 2×9 + 3×11 = 58 C[0][1] = A의 0행 · B의 1열 = 1×8 + 2×10 + 3×12 = 64 C[1][0] = A의 1행 · B의 0열 = 4×7 + 5×9 + 6×11 = 139 C[1][1] = A의 1행 · B의 1열 = 4×8 + 5×10 + 6×12 = 154 C = | 58 64 | | 139 154 | 일반식 C[i][j] = A[i][0]×B[0][j] + A[i][1]×B[1][j] + ... + A[i][n-1]×B[n-1][j] 위 식에서 바뀌는 부분을 k 로 두면 다음과 같이 정리된다. C[i][j] += A[i][k] × B[k][j] (k = 0 ~ n-1) n 은 A의 열 개수(= B의 행 개수)이고 인덱스는 0부터 시작하므로, k 는 0 부터 n-1 까지 돈다. 참고 행렬 곱셈 - 위키백과 < 코드 > class Solution { public int[][] solution(int[][] arr1, int[][] arr2) { int m = arr1.length; int p = arr2[0].length; int n = arr1[0].length; int[][] answer = new int[m][p]; for (int i = 0; i < m; i++) { for (int j = 0; j < p; j++) { int sum = 0; for (int k = 0; k < n; k++ ) { sum += arr1[i][k] * arr2[k][j]; } answer[i][j] = sum; } } return answer; } }
То, что RADAR обнаружил и классифицировал для этой возможности. Это опубликованный источником текст, а не подтверждение, что предложение ещё действует.
[프로그래머스/JAVA] 행렬의 곱셈. 문제: 행렬의 곱셈 이 문제는 풀이보다 행렬의 곱셈이 어떻게 이루어지는지 짚고 넘어갈 필요가 있다. 예전에 배웠지만 가물가물해서, 다시 공부하며 기록한다. 행렬의 곱셈이란? 앞 행렬의 행 과 뒤 행렬의 열 을 같은 위치끼리 곱한 뒤 모두 더한다. 곱할 수 있는 조건 A가 m × n , B가 n × p 일 때, A의 열 개수 와 B의 행 개수 가 같아야 곱할 수 있고, 결과는 m × p 가 된다. (2 × 3) × (3 × 2) = (2 × 2) 다만 이 문제는 아래처럼 곱할 수 있는 행렬만 주어진다. 그래서 크기 검사는 생략하고, 곱셈 계산에만 집중한다. 계산 방법 결과의 i 행 j 열 값은 A의 i 행과 B의 j 열을 같은 위치끼리 곱해서 더한 값이다. A = |…