본문 바로가기
프로그래밍 문제/BOJ(백준 온라인 저지)

[BOJ 2740번] 행렬 곱셈(JAVA)

by 테크케찰 2020. 8. 30.

https://www.acmicpc.net/problem/2740

 

2740번: 행렬 곱셈

첫째 줄에 행렬 A의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 순서대로 주어진다. 그 다음 줄에는 행렬 B의 크기 M과 K가 주어진다. 이어서 M개의 줄에 행렬 B의 원소 K개

www.acmicpc.net

import java.util.*;
import java.io.*;

public class Main {
	
	static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
	static BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
	static int[][] matrixA, matrixB, matrix_result;
	
	public static void main(String args[]) throws Exception {
		String s[]=br.readLine().split(" ");
		int n=Integer.parseInt(s[0]);
		int m=Integer.parseInt(s[1]);
		matrixA=new int[n][m];
		for(int i=0;i<n;i++) {
			String s1[]=br.readLine().split(" ");
			for(int j=0;j<m;j++) {
				matrixA[i][j]=Integer.parseInt(s1[j]);
			}
		}
		String s2[]=br.readLine().split(" ");
		m=Integer.parseInt(s2[0]);
		int k=Integer.parseInt(s2[1]);
		matrixB=new int[m][k];
		for(int i=0;i<m;i++) {
			String s3[]=br.readLine().split(" ");
			for(int j=0;j<k;j++) {
				matrixB[i][j]=Integer.parseInt(s3[j]);
			}
		}
		matrix_result=new int[n][k];
		for(int i=0;i<n;i++) {
			for(int j=0;j<k;j++) {
				for(int l=0;l<m;l++) {
					matrix_result[i][j]+=matrixA[i][l]*matrixB[l][j];
				}
			}	
		}
		for(int i=0;i<n;i++) {
			for(int j=0;j<k;j++) {
				bw.write(matrix_result[i][j]+" ");
			}
			bw.write("\n");
		}
		bw.flush();
		bw.close();
	}
	
}

 

행렬 곱셈에 대한 내용은 아래 링크에 들어가 보시면 자세한 내용을 보실 수 있습니다.

https://ko.wikipedia.org/wiki/%ED%96%89%EB%A0%AC_%EA%B3%B1%EC%85%88

 

행렬 곱셈 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 둘러보기로 가기 검색하러 가기 행렬 곱셈(matrix multiplication)은 행렬에 대한 이항연산이다. 벡터의 선형결합 또는 선형사상의 합성 등의 의미를 부여할 수 있다.

ko.wikipedia.org

N*M 행렬과 M*K 행렬을 곱하면 N*K 행렬이 생기는데요, 이를 이용해서 결과 값을 저장할 N*K 크기의 이중 배열을 생성하고, 행렬 곱에 대한 내용을 삼중 for문으로 나타내 보았습니다.