문제 설명
행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.
제한 조건- 행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.
arr1 | arr2 | return |
[[1,2],[2,3]] | [[3,4],[5,6]] | [[4,6],[7,9]] |
[[1],[2]] | [[3],[4]] | [[4],[6]] |
내가 푼 풀이
function solution(arr1, arr2) {
return arr1.map((row,i) => arr2[i].map((col,j) => arr1[i][j]+arr2[i][j]))
}
우선 행렬의 덧셈이고 같은 크기의 배열 덧셈이기 때문에 이중 for문을 쓰기가 싫었다.
늘 하던 방식으로 말고 함수로 구현하겠다 싶어서 map함수를 사용하게 되었다.
map()함수는 행렬의 요소 요소에게 함수의 기능을 전달하는 함수이다.
예를 들어, 행렬의 요소들마다 *2를 하고 싶다면 우린 for문을 돌려서 실행을 해야 한다.
이를 방지해주는 것이 이 map()함수이다.
map()함수
https://velog.io/@daybreak/Javascript-map%ED%95%A8%EC%88%98
그렇기에 요소마다 다른 배열의 요소를 더해주는 것에는 이 map함수가 최적이다.(why? 요소마다 각 배열들을 더해주니깐 게다가 index값도 가져올 수 있다.)
먼저 i 는 행(rows)를 j는 열(cols)를 나타낸다.
예를 들자, 첫번째 예제에서
arr1 | arr2 | return |
[[1,2],[2,3]] | [[3,4],[5,6]] | [[4,6],[7,9]] |
1. arr1.map이 첫번째 돌아가면 i=0이 되고 row=[1,2]가 된다.
1) i=0일 때, arr2[i].map이 첫번째로 돌아가면 j=0이 되고, arr1[0][0]+arr2[0][0]=4 이 된다.
2) i=0일 때, arr2[i].map이 두번째로 돌아가면 j=1이 되고, arr1[0][1]+arr2[0][1]=6 이 된다.
( arr2[0].map이 끝나고 arr1.map의 루틴으로 돌아간다.)
2. arr1.map이 두번째로 돌아가면 i=1이 된다.
1) i=1일 때, arr2[i].map이 첫번쨰로 돌아가고 j=0이 된다. arr[1][0]+arr2[1][0]=7
2) i=1일 때, arr2[i].map이 두번째로 돌아가고 j=1이 된다. arr[1][1]+arr2[1][1]=9
( arr2[1].map이 끝나고 arr1.map의 루틴으로 돌아간다.)
(arr1.map의 루틴이 끝나고 값을 return해준다.)
남이 푼 풀이
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
}
전형적인 for문이다. for문(row) 중간에 answer[i]=[]을 넣어줬다.
2줄에서 answer을 선언했을 때 안에 배열을 만들지 않았기에 새로운 row가 나올 때마다 빈 배열을 선언해줘야한다.
만약 answer[0][0]=1을 넣고 싶은데 answer배열은 1차원 배열이라면 오류가 뜨기에 answer[i][]를 만들어 준 것.
남이 푼 풀이
function solution(arr1, arr2) {
return arr1.map((row,i) => row.map((col,j) => col+arr2[i][j]))
}
먼저 내 코드보다 이 코드가 훨씬 좋다...ㅋㅋㅋ
arr1.map으로 row를 불러내서 arr2[i] 대신 row를 써줬다. 쓰라고 함수가 알려주는데 쓰지 못했다....ㅎㅎ
row는 현재 row=arr1[0]이다.
이 상태에서 다시 row.map을 불르면 col은 arr1[0][0]=row[0]=col이 된다.
여기서 col+arr2[i][j]만 해주면 끝이다.
'알고리즘' 카테고리의 다른 글
[항해99][프로그래머스] 내적 in Javascript (0) | 2022.07.16 |
---|---|
[항해99][프로그래머스] 나누어 떨어지는 숫자 배열 in Javascript (0) | 2022.07.16 |
[항해99][프로그래머스] 두 정수 사이의 합 in Javascript (0) | 2022.07.15 |
[항해99][프로그래머스] 가운데 글자 가져오기 in Javascript (0) | 2022.07.15 |
[백준 17298번] 오큰수 (0) | 2021.11.16 |
댓글