[프로그래머스] 행렬의 덧셈
취업 준비를 본격적으로 시작하면서 코딩 테스트를 대비하기 위해서 이번에는 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
이라는 배열의 메서드에 대해 이해력을 높여야할 것 같습니다. 🥸