[Programmers #12950] - 행렬의 덧셈

G_NooN·2024년 1월 19일
0

Algorithms

목록 보기
25/33
post-thumbnail

(Lv. 1) 행렬의 덧셈 (문제 링크)

문제 설명

행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더하는 것이다.
2개의 행렬 arr1과 arr2가 주어졌을 때, 두 행렬의 덧셈 결과를 return하는 solution 함수를 완성하라.

제한 조건

  1. arr1, arr2의 행과 열의 길이는 500을 넘지 않는다.

입출력 예시


접근 방식

  1. 입력값 : 행렬 2개 / 출력값 : 두 행렬의 각 요소를 합한 행렬
  2. 행렬의 형태
    arr[0] : arr[0][0], arr[0][1], ...
    arr[1] : arr[1][0], arr[1][1], ...
    ...
  3. 중첩 for문을 사용하여 행렬의 값을 합산한다.
    arr[0] -> arr[1] -> ...
    arr[0][0] -> arr[0][1] -> ...

해결 방법

  1. 행을 순회한다.
    1-1. 행이 존재하지 않으면, 초기화한다.
  2. 열을 순회한다.
    2-1. answer의 행에 값을 push한다.
  3. 결과를 출력한다.

코드

function solution(arr1, arr2) {
  let answer = [[]];

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

  return answer;
}

시행착오

초기 코드

function solution1(arr1, arr2) {
  let answer = [[]];

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

  return answer;
}
  • 문제점
    : TypeError: Cannot set properties of undefined (setting '0')

  • 원인
    : 현재 answer는 answer[0] 부분만 초기화가 되어 있고, answer[1] 이후의 부분은 초기화되어있지 않다.

  • 해결 방법
    : answer[1] 이후의 부분이 존재하지 않는지 확인하여 존재하지 않으면 빈 배열 [] 로 초기화한다.

	if (!answer[i]) answer.push([]); // 또는 if(answer[i] === undefined) answer.push([]);
  • 추가 개선
    : 배열에 추가하는 방식으로 push()를 사용해서, 값을 할당하는 방식도 push()로 변경하였다.
	// AS-IS
	answer[i][j] = arr1[i][j] + arr2[i][j];

	// TO-BE
	answer[i].push(arr1[i][j] + arr2[i][j];

주요 개념

  • 배열의 초기화를 잊지 말자
profile
쥐눈(Jin Hoon)

0개의 댓글