[프로그래머스] Lv.1 행렬의 덧셈 (JS)

아름·2023년 12월 22일
0

알고리즘

목록 보기
24/26
post-custom-banner

🔎 문제

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

제한 사항

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

입출력 예

arr1arr2return
[[1,2],[2,3]][[3,4],[5,6]][[4,6],[7,9]]
[[1],[2]][[3],[4]][[4],[6]]

🔓 풀이 과정

고민

1) 배열 안에 배열이 있는 형태 -> for문 두번 돌리기
2) 첫 번째 for문에서는 arr1의 인덱스에 접근하기
3) 두 번째 for문에서는 arr1[i]의 인덱스에 접근하기

나의 풀이

function solution(arr1, arr2) {
  let answer = [];
  // i를 0부터 arr1의 길이만큼 돌리기
  for (let i = 0; i < arr1.length; i++) {
    let sum = [];
    // arr1의 i번째 인덱스의 j번째 요소와
    // arr2의 i번째 인덱스의 j번째 요소를
    for (let j = 0; j < arr1[i].length; j++) {
      sum.push(arr1[i][j] + arr2[i][j]); // 곱한 것을 push해서 넣어주고 다 더하기
    }
    // 마지막에 sum을 answer에 넣어주기
    answer.push(sum);
  }
  return answer;
}
// 내가 쓴 풀이 리팩토링
// push 쓰지 않기
function solution(arr1, arr2) {
  let answer = [[]];
  for (let i = 0; i < arr1.length; i++) {
    answer[i] = [];
    for (let j = 0; j < arr1[i].length; j++) {
      answer[i][j] = arr1[i][j] + arr2[i][j];
    }
  }
  return answer;
}

그 밖의 풀이

function solution(arr1, arr2) {
  return arr1.map((v, i) => v.map((v2, j) => v2 + arr2[i][j]));
}

// 맵 안에서 맵을 한번 더 돌렸다.
// arr1을 맵핑 하면 첫 번째 인자로 v =[1, 2], 인덱스 i=0 -> 이 상태에서 v를 다시 맵핑
// 새로운 인덱스인 v2 =1, 인덱스 j=0이 추가됨
profile
내 꿈은 개발자
post-custom-banner

0개의 댓글