본문 바로가기
알고리즘

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

by 지 요니 2023. 4. 7.
🌼문제 설명

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

🌼제한 조건
  • 행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.
🌼입출력 예
arr1 arr2 return
[[1,2],[2,3]] [[3,4],[5,6]] [[4,6],[7,9]]
[[1],[2]] [[3],[4]] [[4],[6]]

 

🌼나의 풀이
function solution(arr1, arr2) {
  var answer = [];

  for (let i = 0; i < arr1.length; i++) {   
    let sum = [];   
    for (let j = 0; j < arr1[i].length; j++) { 
      sum.push(arr1[i][j] + arr2[i][j]);
    }
    answer.push(sum);
  }

  return answer;
}

2차원 배열을 이중 for문을 돌려 2개의 배열을 같은 인덱스에 있는 값끼리(각 0번째 인덱스 0 번째 요소, 0번째 인덱스 1번째 요소,... 등등의 방식) 덧셈

🌼다른 사람 풀이
function solution(arr1, arr2) {
    var answer = [[]];
    for (var i=0; i<arr1.length; i++){
        answer[i] =[];
        for(var j=0; j<arr1[i].length; j++){
            answer[i].push(arr1[i][j] + arr2[i][j]);
        }
    }
    return answer;
}

sum[]이라는 새로운 배열 만들지 않고 answer배열 하나만 이용해서 푼 풀이

 

function sumMatrix(A,B){
    return A.map((arr1, idx1) => arr1.map((val, idx2) => val+B[idx1][idx2]));
}

map() 중첩해 풀기...! map활용을 해보자ㅜ

2중배열의 각 행을 arr1이라고 하고, 이 arr1의 각각의 요소들을 idx1이라고 한 후에 각각의 idx1에 B의 각 요소들을 더해줌.

🌼활용 메서드
  • array.map(): 배열(array)내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 가진 새로운 배열을 만들어냄
let newArr=arr.map(function callback (현재값 [, index [, array]] ) {
// return newArr를 위한 요소
}[,thisArg)
  • callback은 arr의 모든 요소를 호출하는 함수 =>그 결과가 newArr에 더해짐
  • [로 감싼 것은 모두 부가적(생략 가능)
  • 현재값으로는 array안에서 처리될 현재 요소를 넣어줌
  • return의 값으로는 newArr에 funtion을 callback한 결과가 각각의 요소에 적용되어 담기게 될 값을 적용

댓글