프로그래머스: 행렬의 덧셈
in Algorithm
프로그래머스 ‘행렬의 덧셈’ 문제.
2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환
나의 해결방안
반쪽자리 정답이었다 처음에.. 완벽히 풀지는 못함
case1
function solution(arr1, arr2) {
var answer = [];
for(let i=0; i<arr1.length; i++){
let arr = [];
for(let k =0; k<arr1[i].length; k++){
arr.push(arr1[i][k]+arr2[i][k])
}
answer.push(arr)
}
return answer;
}
solution([[4,5][1,3])
우선 2중 for문 돌려야한다는건 알았는데, 몇줄을 다른 답안을 보고 힌트를 얻어서 넣었다
let arr = [];
이거를 1번 for문 안, 2번 for문 밖에 넣어줘야한다는 생각을 못했다.
이걸 넣어줘야 배열로 한번 감싸주니까 [x,x] 이렇게 됐을텐데..
그리고 for(let k =0; k<arr1[i].length; k++){
여기서 처음에는 arr2[i]
이렇게썼는데
그렇게 써버리면 배열의 길이가 달라질 경우 감지하지 못한다.
그래서 arr2[i]
가 아니라 arr1[i]
로 해줘야함. 이래야 가변적인 arr[i]의 길이에 반응할 수 있다.
배열안의 배열이므로 arr.push(arr1[i][k]+arr2[i][k])
이렇게 사용한다.
arr[i][k]
은 arr의 i번째 값의 k번째 값이라는 뜻이니까 (예를들면 arr1[0][0]
이런경우 첫 배열의 첫번째 값이라는 뜻이니까 4를 의미 )
그래서 0번째 배열의 0번값과 1번째 배열의0번값의 합을 더하고 (0,0),
0번째 배열의 1번값과 1번째 배열의 1번값의 합을 더하는 식으로 더하다보면 행렬의 합이 되는것.
솔직히 2중 for문이 어려웠던 건 아니었고,
나는 배열안에 배열을 어떻게 넣어주지…? 라는 생각을 했었다
이런경우는 1번for문(=겉 for문) 과 2번 for문 사이에 변수배열을 선언해주면된다.(=let arr = []
)
그리고 1번for문(=겉 for문) 과 2번 for문 사이에 answer.push(arr)
를 넣어주고
그러면 2번for문을 돌때마다 배열에 넣어주게 되는데,
그렇게 되면 2번for문을 돌때 한번 배열을 넣어주고 (= arr.push(arr1[i][k]+arr2[i][k])
)
2번for문이 끝나면 그때 1번for문으로 배열을 감싸주기 때문에 [[1,2],[2,3]]
이런식의 배열 안의 배열이 가능해진다
배열안에 배열을 만들어주는 방법은 바깥for문과 안쪽의 for문 사이에 배열선언과 push를 해주는게 포인트⭐️였다
case 2
const answer = arr1.map((numArr, i) => {
const row = numArr.map((num,j)=>{
return num + arr2[i][j]
})
return row
})
2중 map 돌려보고 싶었는데 이렇게 돌리는거구나 처음알았음!!!!
ㅋㅋㅋㅋ 신기하다
arr1의 값들을 numArr로 받은다음에 걔를 map으로 돌리고 그 안에 값을 num(=arr1[i][j]
)으로 받아오고
각각 i번째 j번째로 돌려서 arr2에서 받아오고…..
와 진짜 신박하네
담부터 이렇게 써봐야지