티스토리 뷰

문제 설명
2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
제한 조건
- 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
- 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
- 곱할 수 있는 배열만 주어집니다.
나의 풀이
코드 작성에 앞서 행렬의 곱셈 방법을 먼저 알아야한다.
라떼 수능엔 행렬이 존재해서 희미한 기억으로 남아있지만 근 몇년간 쓴 적이 없으니 다시 행렬의 곱셈에 대해 찾아봤다.
https://mathbang.net/562
이 글을 참고하여 공책에 예시에 대한 행렬곱을 먼저 풀어봤다.
풀다보니 흐름이 읽혔고 이제 코드를 짠다.
function solution(arr1, arr2) {
let result = []
for (let i = 0; i < arr1.length; i++) {
let temp = []
for (let j = 0; j < arr2[0].length; j++) {
let sum = 0
for (let k = 0; k < arr1[0].length; k++) {
sum += arr1[i][k] * arr2[k][j]
}
temp.push(sum)
}
result.push(temp)
}
return result
}
열의 곱셈을 위해 for문을 무려 3번이나 돌렸다… ㅎ
곱셈 후의 값을 temp 배열에 쌓고 해당 열의 곱이 완성되면 result에 배열을 쌓는 방식으로 풀었다.
다른 사람의 풀이
function solution(arr1, arr2) {
return arr1.map((row) => arr2[0].map((x,y) => row.reduce((a,b,c) => a + b * arr2[c][y], 0)))
}
속도가 확연하게 빨라진건 아니지만 map
함수, reduce
함수를 통해 좀 더 간결한 코드를 작성하셔서 퍼왔다.
'프로그래머스 코딩테스트 > Javascript' 카테고리의 다른 글
[프로그래머스] Javascript : 연속 부분 수열 합의 개수 (1) | 2024.04.02 |
---|---|
[프로그래머스] Javascript : 기능개발 (0) | 2024.03.17 |
[프로그래머스] Javascript : 카펫 (0) | 2024.03.08 |
[프로그래머스] Javascript : 다음 큰 숫자 (0) | 2024.02.16 |
[프로그래머스] Javascript : 올바른 괄호 (0) | 2024.02.02 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 알고리즘
- 라라벨
- 인프런spring
- Sts
- 프로그래머스
- IntelliJ말고spring
- algorithm
- phpstorm
- 프로그래머스알고리즘
- Git
- homebrew
- 김영한spring
- M1
- 우아한형제spring
- javascript알고리즘
- nestjs
- 이븐아이후기
- php
- RDS
- html태그
- laravel
- javascriptalgorithm
- IntelliJ
- http
- 이븐아이부트캠프
- 프로그래머스코딩테스트
- Spring
- 이븐아이부트캠프후기
- 인프런스프링mvc
- MAC
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
글 보관함