반응형
```
백준 2740번 행렬 곱셈 JAVA 구현해보기
```
이번 글을 통해 배워갈 내용
- 백준 2740번 풀이
https://www.acmicpc.net/problem/2740
백준 2740번 행렬곱셈은
난이도 브론즈 등급의 문제로서
N * M 사이즈 행렬과 M * K 사이즈 행렬을 입력받고
그 행렬들의 곱인 행렬 M * M 사이즈를 구해주면 됩니다.
30분 정도 위에 링크를 방문하셔서 풀어보시고
안 풀리시는 경우에만 아래 해답을 봐주시면 감사하겠습니다.
행렬 두 개를 입력받고
입력받은 행렬을 곱해줍니다.
그다음 결과 행렬을 출력해줍니다.
행렬 곱셈은 여기를 참조해주세요
https://ko.wikipedia.org/wiki/%ED%96%89%EB%A0%AC_%EA%B3%B1%EC%85%88
전체 코드는 아래와 같습니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args) throws IOException {
// 행렬을 입력받는다
Matrix matrixA = findInputMatrix();
Matrix matrixB = findInputMatrix();
// 행렬의 제곱을 구한다
Matrix matrixC = multiplyMatrix(matrixA, matrixB);
// 결과를 출력한다
printMatrix(matrixC);
}
// 행렬을 입력받는다
private static Matrix findInputMatrix() throws IOException {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
final int rowSize = Integer.parseInt(st.nextToken());
final int colSize = Integer.parseInt(st.nextToken());
int[][] matrix = new int[rowSize][colSize];
for (int i = 0; i < rowSize; i++) {
st = new StringTokenizer(br.readLine(), " ");
for (int j = 0; j < colSize; j++) {
matrix[i][j] = Integer.parseInt(st.nextToken());
}
}
return new Matrix(rowSize, colSize, matrix);
}
// 두 행렬의 곱을 구한다
private static Matrix multiplyMatrix(Matrix lhsMatrix, Matrix rhsMatrix) throws IOException {
if (lhsMatrix.getColSize() != rhsMatrix.getRowSize()) {
throw new IOException();
}
int[][] retMatrix = new int[lhsMatrix.getRowSize()][rhsMatrix.getColSize()];
for (int i = 0; i < lhsMatrix.getRowSize(); i++) {
for (int j = 0; j < rhsMatrix.getColSize(); j++) {
retMatrix[i][j] = 0;
for (int k = 0; k < lhsMatrix.getColSize(); k++) {
retMatrix[i][j] += (lhsMatrix.getMat()[i][k] * rhsMatrix.getMat()[k][j]);
}
}
}
return new Matrix(lhsMatrix.getRowSize(), rhsMatrix.getColSize(), retMatrix);
}
// 결과값을 출력한다.
private static void printMatrix(Matrix matrix) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < matrix.getRowSize(); i++) {
for (int j = 0; j < matrix.getColSize(); j++) {
sb.append(matrix.getMat()[i][j]).append(' ');
}
sb.setLength(sb.length() - 1);
sb.append("\n");
}
sb.setLength(sb.length() - 1);
System.out.print(sb);
}
// 백준이 아닌 경우 static 제거 후 다른 파일로 이동
private static class Matrix {
final private int rowSize;
final private int colSize;
final private int[][] mat;
public Matrix(int rowSize, int colSize, int[][] mat) {
this.rowSize = rowSize;
this.colSize = colSize;
this.mat = mat;
}
public int getRowSize() {
return rowSize;
}
public int getColSize() {
return colSize;
}
public int[][] getMat() {
return mat;
}
}
} //codemasterkimc.tistory.com [김씨의 코딩 스토리]
읽어주셔서 감사합니다
무엇인가 얻어가셨기를 바라며
오늘도 즐거운 코딩 하시길 바랍니다 ~ :)
반응형
'Java > Java 알고리즘' 카테고리의 다른 글
백준 24183번 Affischutskicket JAVA 구현해보기 (0) | 2022.04.17 |
---|---|
백준 24883번 자동완성 JAVA 구현해보기 (0) | 2022.04.17 |
백준 10178번 할로윈의 사탕 JAVA 구현해보기 (0) | 2022.04.17 |
백준 2921번 도미노 JAVA 구현해보기 (0) | 2022.04.17 |
백준 2959번 거북이 JAVA 구현해보기 (0) | 2022.04.17 |