본문 바로가기
알고리즘/c++ 프로그래머스

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

by 말린밴댕이_공부 2023. 5. 11.
반응형

문제 링크

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

 

프로그래머스

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

programmers.co.kr

문제

개념 및 코드 풀이

사실 행렬의 곱셈에 대해서만 기억을 한다면 진행을 할 수 있습니다.

 

하지만 까먹어도 입출력 예시를 보시면 어떻게 계산이 되는지에 대해서 유추도 가능은 합니다.

/*
행렬의 곱
(행 * 열) * (행 * 열) = 행 * 열
가로로 첫번째 행렬의 열들과 두번째 행렬의 행이 곱해진다는 것을 알아야 함.
ex)
1 2    5 6
3 4    7 8
의 두행렬의 곱셈은
1*5+2*7 1*6+2*8
3*5+4*7 3*6+4*8 이 된다.

사실 행렬의 곱셈 자체를 공식을 알게 된다면 편하다. 물론 몰라도 입출력 예시 2번째를 보게 되면 알 수 있다.
5행 2열   2행 5열 행렬을 곱셈하면 5행5열인 행렬이 되는것입니다.
*/
#include <string>
#include <vector>
#include <iostream>

using namespace std;

vector<vector<int>> solution(vector<vector<int>> arr1, vector<vector<int>> arr2) {
    vector<vector<int>> answer;
   
    vector<int> col;
   
    int sum =0;
   
    for(int i = 0; i < arr1.size();i++){
        col.clear();
        for(int j = 0; j < arr2[0].size(); j++){
            sum = 0;
            for(int k = 0;k< arr1[0].size(); k++){
                sum += arr1[i][k] * arr2[k][j];
            }
            // cout<<sum <<" ";
            col.push_back(sum);
        }
        answer.push_back(col);
    }
    return answer;
}

사실 반복문 arr2[0]과 arr[1]을 바꿔적어가지고 cout<<sum<<" "을 하면서 디버깅했었습니다 :)

반응형

댓글