2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
곱할 수 있는 배열만 주어집니다.
function solution(arr1, arr2) {
var answer = [[]];
for(let i=0; i<arr1.length; i++){
let result=[];
for(let j=0; j<arr2[0].length; j++){
let temp=0;
for(let k=0; k<arr2.length; k++){
temp+=parseInt(arr1[i][k])*parseInt(arr2[k][j]);
}
result.push(temp);
}
answer.push(result);
}
answer.shift();
return answer;
}
해당 문제에서는 총 세 번의 for문을 사용해야 한다.
식은 아래와 같이 진행된다.
result[0,0] = arr1[0,0]arr2[0,0] + arr1[0,1]arr2[1,0] + arr1[0,2]arr2[2,0]
result[0,1] = arr1[0,0]arr2[0,1] + arr1[0,1]arr2[1,1] + arr1[0,2]arr2[2,1]
result[0,2] = arr1[0,0]arr2[0,2] + arr1[0,1]arr2[1,2] + arr1[0,2]*arr2[2,2]
arr1은 반복문이 돌아갈 때마다 두 번째 숫자가 1씩 변하고, 첫 번째 숫자는 고정적이다.
따라서 i와 k를 사용하면 된다.
arr2는 반복문이 돌아갈 때마다 두 번째 숫자는 그대로지만 첫 번째 숫자가 1씩 올라가므로 arr1에 쓰인 k를 먼저 써주고,
k반복문이 다 돌아가고 나면 그제서야 첫 번째 숫자가 변하므로 j를 사용해준다.
결론적으로
for(i=0; i<arr1.length; i++)
for(j=0; j<arr2[0].length; j++)
for(k=0; k<arr2.length; k++)
이처럼 진행된다.
또한 result가 각 한 줄씩 모여 answer을 이루게끔 코드를 작성하였다.
k 반복문이 한 번 다 돌고 나면 구해진 값(temp)을 result에 넣어주고, 완성된 result배열을 answer에 넣어준 후 result는 다시 초기화해주는 방법을 반복한다.
그런데 출력을 해보니 answer의 맨 앞 요소가 빈칸([])으로 들어있는 것을 확인했다.
그래서 shift()를 이용해 가장 첫 번째 요소를 삭제해주었다.