본문 바로가기
프로그래머스

프로그래머스 행렬의 곱셈

by 콩순이냉장고 2021. 7. 30.

문제 URL : https://programmers.co.kr/learn/courses/30/lessons/12949

 

코딩테스트 연습 - 행렬의 곱셈

[[2, 3, 2], [4, 2, 4], [3, 1, 4]] [[5, 4, 3], [2, 4, 1], [3, 1, 1]] [[22, 22, 11], [36, 28, 18], [29, 20, 14]]

programmers.co.kr

문제접근법 : 행렬의 곱셈을 알고리즘화 하는겁니다. 

고등학교 수학만 배워도 행렬의 곱셈은 다아실꺼고 일반적인 알고리즘은 O(n^3)의 알고리즘이 나오고

누구든 쉽게 접근할수 있기때문에 그렇게 풀었습니다. 최적화 알고리즘은 O(n^2.xxx)라는 알고리즘이 있긴한데

이문제에선 할 필요없습니다. 

행렬의 곱셀을 잘 모르신다면 https://ko.wikipedia.org/wiki/%ED%96%89%EB%A0%AC_%EA%B3%B1%EC%85%88

 

행렬 곱셈 - 위키백과, 우리 모두의 백과사전

행렬 곱셈을 위해선 첫째 행렬의 열 갯수와 둘째 행렬의 행 갯수가 동일해야한다. 곱셈의 결과 새롭게 만들어진 행렬은 첫째 행렬의 행 갯수와 둘째 행렬의 열 갯수를 가진다. 행렬 곱셈(matrix mul

ko.wikipedia.org

위에한번 공부하시길 바랍니다. 

소스코드 : 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <bits/stdc++.h>
using namespace std;
 
vector<vector<int>> solution(vector<vector<int>> arr1, vector<vector<int>> arr2) {
    vector<vector<int>> answer;
    for (int i = 0; i < arr1.size(); i++) {
        vector<int> v;
        for (int k = 0; k < arr2[0].size(); k++) {
            int sum = 0;
            for (int j = 0; j < arr2.size(); j++) {
                sum += arr1[i][j] * arr2[j][k];
            }
            v.push_back(sum);
        }
        answer.push_back(v);
    }
    return answer;
}
cs

 

 

궁금한점 혹은 모르는점 어떤질문이든 댓글은 언제나 환영입니다.