[BOJ - 2740] 행렬 곱셈

박재민·2023년 3월 20일
0

알고리즘

목록 보기
3/8

행렬의 곱셈을 한동안 잊고 살다가 오랜만에 머리에서 끄집어 낸 문제

문제 링크

행렬 곱셈

코드

#include <iostream>
#include <vector>
using namespace std;

int main(void){
  

  int N,M,m,n;
  int in;
  int temsum;

  cin >> N >> M;
  vector<vector<int>> A(N);
  for(int i =0;i<N;i++){
    for(int j=0;j<M;j++){
      cin >> in;
      A[i].push_back(in);
    }
  }

  cin >> m >> n;
  vector<vector<int>> B(m);
  vector<vector<int>> C(N);
  for(int i =0;i<m;i++){
    for(int j=0;j<n;j++){
      cin >> in;
      B[i].push_back(in);
    }
  }

  for(int i=0;i<N;i++){
    for(int j=0;j<n;j++){
      temsum=0;
      for(int t=0;t<M;t++){
        temsum += (A[i][t] * B[t][j]);
      }
      C[i].push_back(temsum);
    }
  }

  for(int i=0;i<N;i++){
    for(int j=0;j<n;j++){
      cout << C[i][j] << ' ';
    }
    cout << '\n';
  }
}

풀이

for(int i=0;i<N;i++){
    for(int j=0;j<n;j++){
      temsum=0;
      for(int t=0;t<M;t++){
        temsum += (A[i][t] * B[t][j]);
      }
      C[i].push_back(temsum);
    }
  }

구현문제다 보니 수학 개념만 알고 있으면 풀 수 있는 문제다 보니 문제 풀이는 생략함

배운 점

별개로 2차원 vector를 활용하는 방법을 배우게 되었음

profile
Newbie Developer

0개의 댓글