알고리즘/코테대비 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;
}