반응형
문제 설명
2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
제한 조건
- 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
- 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
- 곱할 수 있는 배열만 주어집니다.
생각
손으로 하면 굉장히 쉬운 행렬의 곱셈인데 코드로 하려면 for문이 많아지고 점점 헷갈려진다.
예를 들어, 3x2 행렬과 2x4 행렬을 곱하면 어떤 행렬이 나올지 생각을 해보자. 3x4행렬이 나온다! 사이에 있는 숫자가 같아야 행렬의 연산이 가능해진다. 따라서 최대 3개의 다른 숫자가 나올 수 있으므로 이를 각각 i,j,k라고 해보자.
ixj 행렬과 jxk 행렬을 곱하면 ixk행렬이 나온다. 이를 토대로 코드를 보자.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
class Solution {
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<arr1[0].length; j++) {
for(int k=0; k<arr2[0].length; k++) {
answer[i][k] += arr1[i][j] * arr2[j][k];
}
}
}
return answer;
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
|
결과로 ixk행렬이 나오므로 ixk로 결과값을 잡고 ixj 와 jxk를 곱하므로 각각의 숫자를 넣어주면 된다.
사실 생각해서 풀면 시간이 오래 걸릴 수 밖에 없다..이런 것은 외우는게 편하니 외워두도록 하자!
반응형
'알고리즘 > 코딩 - 프로그래머스' 카테고리의 다른 글
[Java][프로그래머스][Level 1] 완주하지 못한 선수 (0) | 2019.07.02 |
---|---|
[Java][프로그래머스][Level 2] 가장 큰 수 (0) | 2019.06.23 |
[Java][프로그래머스][Level 2] 피보나치 수 (0) | 2019.05.28 |
[Java][프로그래머스][Level 2] 최솟값 만들기 (0) | 2019.05.27 |
[Java][프로그래머스][Level 2] 숫자의 표현 (0) | 2019.05.26 |