programmers 코딩테스트 : 행렬의 덧셈

H·2022년 4월 7일
0

Coding Test

목록 보기
3/26

🔔 행렬의 덧셈

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

⛔ 제한 조건
행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.


😶 시행착오

중첩 배열은 처음이라 reduce를 사용해 배열을 풀고, 그 해당 배열을 더한 후 다시 중첩 배열으로 작업하려 했으나, reduce를 처음 사용해봐서 해당 식은 제출할 수 없는 식이라 피드백을 받은 후 진행하기로 했다. ( 거의 반성문,,, ) 해당 방법이 진행이 안되는건 아니지만 더 적합한 방법은 하단으로,,,, 해당 풀이는 피드백 주실 때 같이 받은 것이다.

function solutionThird(arrayFirst, arraySecond) {
  // REDUCE -> 이런 로직에서는... 개인적으로 추천하지 않음
  const result = arrayFirst.reduce((accumulatorI, item, i) => {
    accumulatorI.push(
      item.reduce((accumulatorJ, jtem, j) => {
        accumulatorJ.push(jtem + arraySecond[i][j]);
        return accumulatorJ;
      }, new Array(0))
    );
    return accumulatorI;
  }, new Array(0));
  return result;
}

🔠 첫번째 통과한 코드

function solution(arr1, arr2) {
    let answer = new Array;
    const arrayLength = arr1.length; 
    const arrayLengthHalf = arr1[0].length; 

    for(let i = 0; i < arrayLength; i++){
        let addArray = new Array; // 내부에 들어가는 배열의 개수 
        for(let j = 0; j< arrayLengthHalf; j++){
            addArray.push(arr1[i][j] + arr2[i][j]) // 내부의 배열 item
        }
        answer.push(addArray) 
    }
    return answer;
}

🔠 두번째 통과한 코드

function solution(arr1, arr2) {
     const result = arr1.map((item, i) => item.map((jtem, j) => jtem + arr2[i][j]));
     answer.push(result);
     return answer;
}

📌 코드 설명

  1. arr1.map((item,i))에서 item은 arr1의 첫 번째 배열
  2. 위에서 나온 item(배열을) map()으로 돌리면 jtem에 1,2,2,3,이 담김
  3. jtem과 arr2의 배열을 i,j순으로 더해줌 arr2[i][j]
  4. answer.push(result);

map()
arr.map(callback(currentValue[, index[, arra_y]])[, thisArg])
callback : 새로운 배열 요소를 생성하는 함수 3개의 인자를 가짐
currentValue : 현재 값 (옵션)
index: 처리할 현재 요소의 인덱스 (옵션)
array : map()을 호출할 배열 (옵션)
thisArg : callback을 실핼할 때 this로 사용되는 값
반환 되는 값 : 배열의 각 요소에 대해 실행한 callback의 결과를 모은 새로운 배열

각각의 요소에 대해 한번씩 순서대로 불러 그 함수의 반환값으로 새로운 배열을 만든다.
값이 삭제되거나, 값이 할당되지 않는 경우 호출 X

profile
🤘 돌머리도 ROCK이다! 🤘

0개의 댓글