- 문제 설명
행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요. - 제한 조건
행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.

문제 풀이.
function solution(arr1, arr2) {
var answer = [];
for(let i = 0 ; i < arr1.length ; i++){
// answer.push([arr1[i]*1+ arr2[i]*1])
num = []
for(let j= 0 ; j < arr1[i].length ; j++){
num.push(arr1[i][j] +arr2[i][j])
}
answer.push(num)
}
return answer;
}
어찌보면 간단하고 어찌보면 어려웠다.
우선 예시를 보면 배열안에 또 배열로 묶여져있다는걸 알수있다.
그렇기때문에 for문을 돌리고 push를 할때 배열에 첫 배열에 넣고 그리고 그 첫 배열을 answer에 push해야 겠다 라고 생각을 하고 시작했다.
for문이 외부, 내부 for문 즉 for문을 중첩해서 사용했는데
외부 for문(바깥쪽 for문)은 바깥쪽 배열 예를들면 arr1 의 배열 [[1,2 ], [2, 3]] 의 [1, 2]와 [2, 3]을 요소로 가진 길이가 2인 배열을 의미하고,
내부 for문(안쪽 for문)은 안쪽 배열 [[1,2 ], [2, 3]] 에서 arr1 의 i번째 인덱스값 [1, 2] 또는 [2, 3]의 j번째 인덱스 값 (i와 j가 0이라면 [1, 2]의 1 )
이런식으로 for문을 통해 반복을 하게끔 했다.
다른사람의 풀이.
function sumMatrix(A,B){
return A.map((arr1, idx1) => arr1.map((val, idx2) => val+B[idx1][idx2]));
}
map을 두번 쓰는건 생각을 못했다. 우선 보면 A를 map함수를 써서 매게변수로 arr1, idx1을 두고 복제, arr1을 또 map함수를 써서 매게변후론 val, idx2 를쓰고 복제한 값에 val + B[idx1][idx2]
예를들어 arr1이 [[1,2],[3,4]] 고 arr2 가 [[3, 4],[5, 6]]이면 arr1을 맵핑을 시작한다. 그러면 첫번째 인자로 v= [1,2] 인덱스는 0,
이 상태에서 다시한번 맵핑을 하면 v2 = 1 , 두번째 인덱스로 0이 추가가 된다. 이때 두번째 인덱스는 [1,2]만큼 돌기 때문에
1까지 커진다.
arr1.map((v, i) => v.map((v2, j) => v2 + arr2[i][j])); 되는거에요. 첫 맵핑에 4,6이 나올겁니다. j가 1까지 커졌으니 다시 arr1의 두번째 맵핑을 합니다.
'코딩테스트' 카테고리의 다른 글
| (javascript) 최대공약수와 최소공배수 (1) | 2024.01.22 |
|---|---|
| (javascript)직사각형 별찍기 (0) | 2024.01.22 |
| (javascript)문자열 내림차순으로 배치하기, 부족한 금액 계산하기, 문자열 다루기 기본 (0) | 2024.01.19 |
| (javascript)수박수박수박수?, 내적, 약수의 개수와 덧셈 (0) | 2024.01.18 |
| (javascript)제일 작은 수 제거하기, 가운데 글자 가져오기 (0) | 2024.01.17 |