728x90
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/12949?language=java
문제 설명
2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
제한 조건
- 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
- 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
- 곱할 수 있는 배열만 주어집니다.
입출력 예
arr1 | arr2 | return |
[[1, 4], [3, 2], [4, 1]] | [[3, 3], [3, 3]] | [[15, 15], [15, 15], [15, 15]] |
[[2, 3, 2], [4, 2, 4], [3, 1, 4]] | [[5, 4, 3], [2, 4, 1], [3, 1, 1]] | [[22, 22, 11], [36, 28, 18], [29, 20, 14]] |
코드
class Solution {
public int[][] solution(int[][] arr1, int[][] arr2) {
// arr1 행과 열의 수
int r1 = arr1.length;
int c1 = arr1[0].length;
// arr2 행과 열의 수
int r2 = arr2.length;
int c2 = arr2[0].length;
// 저장할 2차원 배열 초기화
int[][] answer = new int[r1][c2];
// 첫 번재 행렬 arr1의 각 행과 두번째 행렬 arr2의 각 열에 대해
for(int i=0; i<r1; i++) {
for(int j=0; j<c2; j++) {
// 두 행렬의 데이터를 곱해 리스트 더하기
for(int k=0; k<c1; k++) {
answer[i][j] += arr1[i][k] * arr2[k][j];
}
}
}
return answer;
}
}
정리
이 문제는 수학의 행렬의 곱셈을 그대로 구현해야 합니다.
1. 인수로 받은 arr1과 arr2의 행과 열 정보를 변수에 가져옵니다.
2. 결과를 담는 행렬의 크기의 배열을 만듭니다. (r1 * c2)
3. 행렬을 곱할 땐 첫번째 행렬의 각 행과 두번째 행렬의 각 열들을 배치해 계산합니다.
4. 첫번째 행렬의 행의 크기인 r1과 두 번째 행렬의 열의 크기인 c2를 사용합니다.
참고
https://mathbang.net/562#gsc.tab=0
728x90
반응형
'Study > Coding test' 카테고리의 다른 글
[프로그래머스] 올바른 괄호 - 자바(Java) (0) | 2024.11.07 |
---|---|
[프로그래머스] 방문길이 - 자바(Java) (1) | 2024.10.16 |
[프로그래머스] 실패율 - 자바(Java) (0) | 2024.10.09 |
[프로그래머스] 모의고사 - 자바(Java) (0) | 2024.09.28 |
[프로그래머스] 두 개 뽑아서 더하기 - 자바(Java) (0) | 2024.09.27 |