본문 바로가기

알고리즘/백준

[백준] 2740 행렬 곱셈

링크: www.acmicpc.net/problem/2740

 

2740번: 행렬 곱셈

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

www.acmicpc.net

배준 단계별 분류 분할정복을 풀던 중 브론즈 문제가 나왔는데,

다음 문제도 행렬 곱셈을 활용하기 때문에 먼저 풀어봤다.

import java.io.*;
import java.util.*;
public class Main {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int [][]A; int [][]B;
		int N,M,K;
		N = Integer.parseInt(st.nextToken());
		M = Integer.parseInt(st.nextToken());
		A = new int[N][M];
		
		for(int i=0;i<N;i++) {
			st =  new StringTokenizer(br.readLine());
			for(int j=0;j<M;j++) {
				A[i][j] = Integer.parseInt(st.nextToken());
			}
		}
		st = new StringTokenizer(br.readLine());
		st.nextToken();
		K = Integer.parseInt(st.nextToken());
		B = new int[M][K];
		for(int i=0;i<M;i++) {
			st = new StringTokenizer(br.readLine());
			int idx= 0;
			while(st.hasMoreElements()) {
				B[i][idx++] = Integer.parseInt(st.nextToken());
			}
		}
		int ans[][] = new int[N][K];
		for(int i=0;i<N;i++) {
			for(int j=0;j<K;j++) {
				for(int k=0;k<M;k++) {
					ans[i][j] += A[i][k]*B[k][j];
				}
			}
		}
		for(int i=0;i<N;i++) {
			for(int j=0;j<K;j++) {
				System.out.print(ans[i][j] + " ");
			}
			System.out.println();
		}
	}

}

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 2749 피보나치 수 3  (0) 2020.12.20
[백준] 10830 행렬 제곱  (0) 2020.12.20
[백준] 11401 이항계수3  (0) 2020.12.20
[백준] 1629 곱셈  (2) 2020.12.20
[백준] 1992 쿼드트리  (0) 2020.12.20