프로그래머스: 행렬의 덧셈




프로그래머스 ‘행렬의 덧셈’ 문제.

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에서 받아오고…..

와 진짜 신박하네

담부터 이렇게 써봐야지










© 2018. by sora

Powered by sora