
문제를 살펴보면 그냥 단순하게 두 행렬을 입력받아 곱한 결과를 출력하는 문제이다
행렬의 곱을 알고있다면 알겠지만, 두 행렬을 곱하려면 앞 행렬의 열의 개수와 뒤 행렬의 행의 개수가 같아야한다
그리고 그 곱의 결과 행렬은 앞 행렬의 행의 크기가 행의 개수, 뒤 행렬의 열의 크기가 열의 개수가 된다
즉, 3 x 2 , 2 x 4의 행렬의 결과는 3 x 4 행렬이 된다는 것이다 이 점을 참고하여 행렬의 값을 저장하는
리스트를 0으로 초기화하여 만들어주었고, for문을 통해 각 곱을 계산하고 더해주었다
문제 자체는 쉽지만, 행렬의 곱 자체가 실수하기 쉽기 때문에 따로 그려가며 index를 확인하며 작성하였다
결과는 언패킹을 사용하여 간단하게 출력하였다
A = []
row_size_A, col_size_A = map(int, input().split())
for _ in range(row_size_A):
A.append(list(map(int, input().split())))
B = []
row_size_B, col_size_B = map(int, input().split())
for _ in range(row_size_B):
B.append(list(map(int, input().split())))
result = [[0 for _ in range(col_size_B)] for _ in range(row_size_A)]
for i in range(row_size_A):
for j in range(col_size_B):
for k in range(col_size_A):
result[i][j] += A[i][k] * B[k][j]
for i in result:
print(*i)
현재 C++을 연습하고 있어서 이 코드를 그대로 사용하여 C++로 작성해보았다
#include <iostream>
#include <vector>
using namespace std;
int main() {
int row_size_A, col_size_A;
cin >> row_size_A >> col_size_A;
// 첫 번째 행렬 입력
vector<vector<int>> A(row_size_A, vector<int>(col_size_A));
for (int i = 0; i < row_size_A; i++) {
for (int j = 0; j < col_size_A; j++) {
cin >> A[i][j];
}
}
int row_size_B, col_size_B;
cin >> row_size_B >> col_size_B;
// 두 번째 행렬 입력
vector<vector<int>> B(row_size_B, vector<int>(col_size_B));
for (int i = 0; i < row_size_B; i++) {
for (int j = 0; j < col_size_B; j++) {
cin >> B[i][j];
}
}
// 결과값 저장
vector<vector<int>> result(row_size_A, vector<int>(col_size_B, 0));
for (int i = 0; i < row_size_A; i++) {
for (int j = 0; j < col_size_B; j++) {
for (int k = 0; k < col_size_A; k++) {
result[i][j] += A[i][k] * B[k][j];
}
}
}
// 결과 출력
for (int i = 0; i < row_size_A; i++) {
for (int j = 0; j < col_size_B; j++) {
cout << result[i][j] << " ";
}
cout << endl;
}
return 0;
}


'Baekjoon' 카테고리의 다른 글
| [Baekjoon]백준 피보나치 수 6(골드 2) - Python (1) | 2025.02.02 |
|---|---|
| [Baekjoon]백준 10830 행렬 제곱(골드 4) - Python, C++ (0) | 2025.02.01 |
| [Baekjoon]백준 11401 이항 계수 3(골드 1) - Python (0) | 2025.01.30 |
| [Baekjoon]백준 1629 곱셈(실버 1) - Python (1) | 2025.01.29 |
| [Baekjoon]백준 1780 종이의 개수(실버 2) - Python (0) | 2025.01.28 |