Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 백준
- C++
- Algorithm
- 동적계획법
- cos pro 1급
- django
- 코테
- 분할정복
- Python
- 파이썬
- issue
- docker
- 개발
- cos
- AndroidStudio
- android
- BAEKJOON
- codingtest
- 코딩테스트
- vuejs
- DART
- 동적계획법과최단거리역추적
- 안드로이드스튜디오
- 안드로이드
- DFS와BFS
- cos pro
- Flutter
- 코드품앗이
- 알고리즘
- DFS
Archives
- Today
- Total
Development Artist
[Baekjoon, C++] 2740번: 행렬 곱셈 본문
728x90
반응형
도입
백준 단계별 풀기에서 분할정복 여섯 번째 문제이다.
링크는 아래와 같다.
2740번: 행렬 곱셈
첫째 줄에 행렬 A의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 순서대로 주어진다. 그 다음 줄에는 행렬 B의 크기 M과 K가 주어진다. 이어서 M개의 줄에 행렬 B의 원소 K개
www.acmicpc.net


풀이
1. 행렬을 어떻게 받을 것인가, 2차원 배열로 받겠다. 행과 열을 표현할 수 있기 때문이다.
2. 곱셈을 어떻게 할 것인가! 행렬의 곱셈을 다들 배웠다고 가정을 하겠다. 다음 그림 처럼 곱셈 로직을 짜겠다! 예를 들어서 2x3 크기의 행렬과 3x2 행렬을 곱셈하면 2x2행렬이 결과로 출력된다. Why? 첫 번째 행렬의 행과 두 번째 행렬의 열을 결과로 가진다고 생각하면 된다. 따라서 2x2이다. 그렇다면, 우리가 NxM 과 MxK를 곱한다면 NxK의 행렬이 나온다. 여기서 N은 i, K은 j이다. 따라서 for문 밖으로 i,j를 두고 M(=k)의 연산을 제일 안에 넣어준다.

코드
#include<iostream>
#define MAX 100
using namespace std;
int matrixA[MAX][MAX], matrixB[MAX][MAX];
int result[MAX][MAX];
int main(void)
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int N, M, K;
cin >> N >> M;
for (int i = 0; i < N; i++)
for (int j = 0; j < M; j++)
cin >> matrixA[i][j];
cin >> M >> K;
for (int i = 0; i < M; i++)
for (int j = 0; j < K; j++)
cin >> matrixB[i][j];
for (int i = 0; i < N; i++)
for (int j = 0; j < K; j++)
for (int k = 0; k < M; k++)
result[i][j] += (matrixA[i][k] * matrixB[k][j]);
for (int i = 0; i < N; i++)
{
for (int j = 0; j < K; j++)
cout << result[i][j] << " ";
cout << "\n";
}
return 0;
}

마무리
풀면서, 이것을 분할 정복 문제인가? 했다. 아마 다음 문제의 행렬 제곱을 위한 행렬 맛보기이지 않을까?!
자아~ 다음 문제로 가보자ㅎㅎ
728x90
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
[Baekjoon, C++] 11444번: 피보나치 수 6 (0) | 2021.01.29 |
---|---|
[Baekjoon, C++] 10830번: 행렬 제곱 (0) | 2021.01.28 |
[Baekjoon, C++] 11401번 : 이항 계수 3 (0) | 2021.01.26 |
[Baekjoon, C++] 1629번 : 곱셈 (0) | 2021.01.24 |
[Baekjoon, C++] 1780번 : 종이의 개수 (0) | 2021.01.23 |