행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.
행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.
이 문제는 이중 for문을 해당 인덱스들의 번호를 이용해 적절히 누적합 시키는 방식을 사용하였습니다.
단 주어진 answer의 초기화 형태는 [[]]의 이중 배열 형식으로 제공이 되었는데, 문제는 해당 배열의 상태는 [0][0] 하나만 있는 상태라는 것입니다. 즉 첫번째 for문(첫번째 배열을 선택)돌려 같은 위치에 있는 arr1과 arr2의 인덱스의 값들을 더하고 그 값을 동일한 answer의 위치에 더하려고 해도
막상 answer는 단일의 이중 배열[0][0] 을 가지고 있기 때문에 첫번째 for문의 처음 루프 [0]은 진행을 시킬 수 있어도, 다음 루프 [1]에 대해서는 answer에 존재하고 있지 않기 때문에(answer[1][0]) 결과적으로 두번째 for문에서 없는 배열에 대해 누적을 하려고 하는 현상이 벌어져, 해당 배열(answer[1][0])이 없는 상황일 경우 배열을 하나 추가 해주는 조건문을 작성해 주어야 합니다.
function solution(arr1, arr2) { var answer = [[]]; // 이중 배열 for(let i = 0 ; i < arr1.length ; i++){ // 두 배열은 길이가 같기 때문에 어느 배열의 길이를 반복 기준으로 설정해도 무방합니다. if(!answer[i]){ answer[i] = []; } // 위에서 설명 드린 것처럼 첫번째 for문(i는 0)에서 answer[i]는 존재 하는 상황이므로 조건(!answer[i]의 조건이 true일 경우 answer의 현재 배열이 false인 상태, 즉 배열이 존재하지 않은 상태의 조건을 추가한 것입니다.)에 부합하는 경우 answer의[i] 번째에 빈 문자열을 할당해 줍니다. 혹은 push 메서드로 해당 빈배열을 할당하는 것 또한 가능합니다. for(let j = 0 ; j < arr1[i].length ; j++){ // 조건 범위를 arr1의 i번째의 길이로 설정한 이유는 이중 for문을 돌면서 j(j는 0부터 시작하므로 이중 for문이 돌려지지 않는 구조입니다.)로는 범위를 설정할 수 없으므로 i(어차피 선택된 배열의 길이만큼 모든 값들을 각각 더해야 하므로)를 반복 조건의 범위로 설정해 줬습니다. answer[i][j] = arr1[i][j] + arr2[i][j]; // arr1과 arr2의 같은 위치에 있는 배열의 값을 마찬가지로 answer의 같은 위치에 저장시킵니다. } } return answer; }