알고리즘/코테대비 100문제
문제 23 - 두 행렬을 곱한 후 전치 행렬 만들기(시뮬레이션)
hoj0806
2025. 2. 19. 15:44
문제 설명
- arr 과 arr2는 정수값으로 이루어진 3 × 3 행렬입니다.
- 이 두 행렬을 곱한 결과의 전체 행렬을 반환하는 solution() 함수를 구현하세요.
제약 조건
- arr, arr2는 각각 3 × 3 크기의 정수 행렬입니다.
입출력
입력
arr = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
arr2 = [
[9, 8, 7],
[6, 5, 4],
[3, 2, 1]
]
출력
[ [ 30, 84, 138 ], [ 24, 69, 114 ], [ 18, 54, 90 ] ]
내 정답 코드
function solution(arr, arr2) {
let m = arr.length; // 행렬 A의 행 개수
let n = arr[0].length; // 행렬 A의 열 개수 (B의 행 개수)
let p = arr2[0].length; // 행렬 B의 열 개수
// 결과 행렬 초기화 (m x p 크기)
let answer = Array.from({ length: m }, () => Array(p).fill(0));
// 두 행렬 곱하기
for (let i = 0; i < m; i++) {
for (let j = 0; j < p; j++) {
for (let k = 0; k < n; k++) {
answer[i][j] += arr[i][k] * arr2[k][j];
}
}
}
// ✅ 새로운 배열을 만들어 전치 행렬 저장
let transposed = Array.from({ length: p }, () => Array(m).fill(0));
for (let i = 0; i < m; i++) {
for (let j = 0; j < p; j++) {
transposed[j][i] = answer[i][j];
}
}
return transposed;
}