한 걸음씩 기록하며

[프로그래머스 코딩테스트] 행렬의 덧셈 본문

알고리즘 & 코딩테스트

[프로그래머스 코딩테스트] 행렬의 덧셈

Haksae 2022. 1. 15. 15:01

[행렬의 덧셈]

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

 

⛏제한 조건

  • 행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.

 

📁 입출력 예시

👉🏻  답안

function solution(arr1, arr2) {
  let answer = [];
  for (let i = 0; i < arr1.length; i++) {       // arr1 만큼 돌리기
      let newArr = [];                          // answer [i] = []; 로 대체 가능 (초기화)
    for (let j = 0; j < arr1[i].length; j++) {  // arr1[i] 길이만큼 돌리기
      newArr.push(arr1[i][j] + arr2[i][j]);     // newArr에 push
    } answer.push(newArr)                       // newArr을 answer배열에 push
  }  return answer;
}

 

📑  간단한 설명

answer로 배열을 선언하고, 이중 for문으로 배열을 더하는 것으로 하였습니다.

let newArr은 answer[i] = []; 로 대체할 수도 있습니다.

.push() 는 해당 배열 끝에 ()을 추가하는 함수입니다.

 

💪🏻 공부하면 좋을 답안

function sumMatrix(A,B){
    return A.map(function(v,i){
    return (typeof(v)=="object")? sumMatrix(v,B[i]):v+B[i];
  });
}

  • 위의 arr1, arr2를 sumMatrix의 매개변수라고 한다면
  • arr1.map 메서드를 통해서 새로운 배열(return) 만든다.
  • arr1.map의 매개변수는 annonymous function이고, 해당 함수는 v(값), i(인덱스) 라는 매개변수를 받음
  • 이 매개변수를 (typeof(값)=="object")? 이라는 조건문을 통해서, true면 sumMatrix(v,B[1]), false면 v+B[i]로 받는다

 

  • .map 배열 안에 있는 것들을 꺼내서 다시 배열로 만든다. 함수를 하나 더 넣은 것은 배열을 한번 더 깨뜨리기 위함이다로 이해하면 좋을듯..
  • map과 reduce 관련 글을 따로 올리는게 좋을 것 같습니다. 어렵네요 😑
Comments