본문 바로가기
C++ 코딩 문제 풀이/프로그래머스

[Programmers] 행렬의 곱셈

by 섬댕이 2024. 1. 2.

https://school.programmers.co.kr/learn/courses/30/lessons/12949

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 


 

문제 해결 과정

착안

$m \times n$ 크기의 행렬 $A$와 $n \times l$ 크기의 행렬 $B$에 대해, 두 행렬의 곱 $C=AB$ 는 $m \times l$ 크기의 행렬이며,

$$c_{ij}=\sum_{k=1}^{n} a_{ik} b_{kj}$$

이다($a_{ik}, b_{kj}, c_{ij}$는 각각 행렬 $A, B, C$의 요소).

 

구현

[스포 주의] 아래 '더보기'를 누르면 코드가 나오니 주의하세요~

더보기
#include <vector>

using namespace std;

vector<vector<int>> solution(vector<vector<int>> arr1, vector<vector<int>> arr2)
{
    vector<vector<int>> answer(arr1.size());
    for (vector<int>& v : answer)
        v.resize(arr2[0].size());
    
    for (int i = 0; i < arr1.size(); i++)
        for (int j = 0; j < arr2[0].size(); j++)
            for (int k = 0; k < arr1[0].size(); k++)
                answer[i][j] += arr1[i][k] * arr2[k][j];
    
    return answer;
}

 

실행 결과

댓글