[프로그래머스] 코딩테스트 연습 - 행렬의 덧셈 (javascript)

지미노·2022년 8월 10일
0

코딩테스트

목록 보기
8/40

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

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

생각해본 풀이법
스프레드 문법 사용
...arr1 , ...arr2
각 인덱스를 더해주는 식을 작성해보기
...arr1[i]+...arr2[i]
for 문을 사용해 arr1.length만큼 반복하기

근데 여기에선 문제가 있었다... 스프레드 문법을 잘 몰라서 그런지 써먹어보기가 힘드네... ㅜㅜ

다시 배열을 만들어서 집어넣고 하는것도 머리아프니 map을 사용해볼까 한다.

  • Array.prototype.map 자신을 호출한 배열의 모든 요소를 순회하면서 인수로 전달받은 콜백 함수를 반복 호출 함. 콜백함수의 반환값들로 구성된 새로운 배열을 반환한다. (무조건 배열로 반환)
arr1.map((i) => i + arr2[j])

이런식으로 하면 arr1의 인덱스에 arr2의 인덱스를 더하는 맵이 아닐까?
근데 문제가 있었다. 콘솔 찍어보니 j가 선언되지 않았다고 한다. 그럼 어쩌지???

두번째 시도.


포문 안에 포문을 넣듯이 맵 안에 또 맵을 넣어보는건 어떨까?

arr1.map((i) => i + arr2.map((j) => arr1[i][j] + arr2[i][j]))

object array가 선언되지 않았다고 한다.

음......

세번째 시도

function solution(arr1, arr2) {
   return  arr1.map((a, i) => i + arr2.map((b, j) => arr1[i][j] + arr2[i][j]))
}

정답이 비스무레하게 나오긴 함
근데 뭐가 틀린거지

출력된거 보니까 i를 빼야겠다 느껴서 빼봄

ㅋㅋㅋㅋ 환장

실행결과 곰곰히 보니까
테스트 2에 null은 배열에 숫자가 하나밖에 없는데 내가 둘을 더하려 생기는거라는걸 알게됨!!!!!!!!!
그렇다면 인덱스를 지정해주면 되잖아!

return  arr1.map((a, i) => arr2[i].map((b, j) => arr1[i][j] + arr2[i][j]))

그렇게 해서 나온 답안 ㅋㅋㅋㅋ
휴.... 힘들었다.....

1개의 댓글

comment-user-thumbnail
2022년 8월 10일

고민하고 풀어내는모습이 너무 멋져요!

답글 달기