[프로그래머스] 행렬의 곱셈

연성·2020년 11월 14일
0

코딩테스트

목록 보기
140/261

[프로그래머스] 행렬의 곱셈

1. 문제

2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.

2. 제한 조건

  • 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
  • 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
  • 곱할 수 있는 배열만 주어집니다.

3. 풀이

  • arr1m x n 행렬이고 arr2n x l 행렬이라면 둘은 곱한 행렬은 m x l 행렬이 된다. m x l 행렬 answer를 만든다.
    저렇게 안 생기면 곱할 수 없다.
  • answer[i][j] = arr1[i][0] * arr2[0][j] + arr1[i][1] * arr2[1][j] + ... + arr1[i][m-1] * arr[m-1][j]
  • 3중 반복문으로 구현하면 된다.

4. 코드

#include <iostream>
#include <vector>

using namespace std;

vector<vector<int>> solution(vector<vector<int>> arr1, vector<vector<int>> arr2) {
    int n = arr1.size();
    int m = arr2[0].size();
    int h = arr2.size();
    vector<vector<int>> answer(n, vector<int>(m));
    
    for(int i=0; i<n; i++){
        for(int j=0; j<m; j++){
            for(int k = 0; k < h; k++){
                answer[i][j] += arr1[i][k] * arr2[k][j];
            }
        }
    }
    
    return answer;
}

0개의 댓글