https://school.programmers.co.kr/learn/courses/30/lessons/12949
문제 설명
2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
제한 조건
- 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
- 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
- 곱할 수 있는 배열만 주어집니다.
입출력 예
arr1 | arr2 | return |
[[1, 4], [3, 2], [4, 1]] | [[3, 3], [3, 3]] | [[15, 15], [15, 15], [15, 15]] |
[[2, 3, 2], [4, 2, 4], [3, 1, 4]] | [[5, 4, 3], [2, 4, 1], [3, 1, 1]] | [[22, 22, 11], [36, 28, 18], [29, 20, 14]] |
나의 문제 풀이
코드에 풀이를 적어 두었습니다.
function solution(arr1, arr2) {
var answer = [];
var tmpAnswer = [];
var sum = 0;
for (let k = 0; k < arr1.length; k++) { // arr1의 값을 가져오는데 사용
for (let i = 0; i < arr2[0].length; i++) { // arr2의 가로값
for (let j = 0; j < arr2.length; j++) { // arr1의 가로로 값을, arr2의 세로로 값을 가져온다
sum += arr1[k][j] * arr2[j][i]; //한 배열의값이 다 더해진 후
}
tmpAnswer.push(sum); // tmpAnswer에 저장후
sum = 0; // sum을 리셋한다
}
answer.push(tmpAnswer); // 더해진 값들을 answer 배열에 저장한뒤
tmpAnswer = []; // tmpAnswer의 배열도 새로운 값들로 저장하기위해 리셋해준다.
}
return answer;
}
다른 풀이
정말 간결하게 잘 푼 코드다.
나는 for loop으로 값들을 더했다면 이 코드에서는 reduce()를 사용하여 값들을 더해준 뒤
결과값을 return 하였다.
function solution(arr1, arr2) {
return arr1.map((row) => arr2[0].map((x,y) => row.reduce((a,b,c) => a + b * arr2[c][y], 0)))
}
'코딩 문제 > 프로그래머스 [ JavaScript ]' 카테고리의 다른 글
[ 프로그래머스 / JavaScript ] 자연수 뒤집어 배열로 만들기 (0) | 2022.10.04 |
---|---|
[ 프로그래머스 / JavaScript ] 멀리 뛰기 (0) | 2022.10.03 |
[ 프로그래머스 / JavaScript ] 다음 큰 숫자 (0) | 2022.10.02 |
[ 프로그래머스 / JavaScript ] 피보나치 수 (1) | 2022.10.01 |
[ 프로그래머스 / JavaScript ] 카펫 (0) | 2022.09.30 |
댓글