[프로그래머스] 행렬의 덧셈

OROSY·2021년 11월 2일
1

Algorithms

목록 보기
38/38
post-thumbnail

출처

[프로그래머스] 행렬의 덧셈

취업 준비를 본격적으로 시작하면서 코딩 테스트를 대비하기 위해서 이번에는 Leetcode가 아닌 프로그래머스에서 문제를 풀어보기로 하였습니다. 하루도 빠짐 없이 매일 1~2개씩 풀어보려고 합니다💪💪

문제


이번 문제를 행렬의 덧셈입니다. 언제나 그렇듯 문제는 그렇게 복잡해보이지 않지만, 실제로 풀이를 시작하면 알고리즘은 쉽지 않다는 것을 느끼게 되는 것 같습니다. 실제로 배열과 배열의 요소의 합을 리턴하면 되는 것이지만, 중요한 것은 i, j와 같은 인덱스의 값을 어떻게 정하느냐였던 것 같습니다.

그리고 여기까지 진행했을 때부터의 문제는 첫 번째로는 반복문의 중첩 피하기, 두 번째로는 어떠한 방식으로 배열 안의 배열을 리턴하느냐였습니다. 저는 아래의 코드에서 보시는 것처럼, 반복문의 중첩 피하기는 실패하였고, 배열은 for문 안에서 각각 push를 통해 두 번째를 해결했습니다.

풀이 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
function solution(arr1, arr2) {
    let answer = [];
  
    const idx = arr1[0].length;
    for (let i = 0; i < arr1.length; i++) {
      let sumArray = [];
       for (let j = 0; j < idx; j++) {
         sumArray.push(arr1[i][j] + arr2[i][j]);
       }
      answer.push(sumArray);
    }
    return answer;
}
cs

다른 풀이

1
2
3
4
5
6
7
8
9
10
11
function sumMatrix(A,B){
  var answer;
  answer = A.map((a, i) => {
    return a.map((val, idx) => {
      val += B[i][idx];
      return val;
    })
  })
 
  return answer;
}
cs

위의 풀이는 map을 통한 다른 풀이 방법입니다. 리액트로 실제 코드를 치면서 map을 사용할 때에는 객체에 들어있는 반복된 레이아웃을 뿌려주는 중요한 역할을 하게 되는데 이렇게 알고리즘에서 map을 쓰려고하면 쉽지 않은 것 같습니다.

위의 코드를 계속 보면서 map이라는 배열의 메서드에 대해 이해력을 높여야할 것 같습니다. 🥸

profile
Life is a matter of a direction not a speed.

0개의 댓글