공부하기/백준

[Java] 백준 풀기 2740 - 행렬 곱셈

XEV 2024. 1. 19. 22:41

자바 백준 2740번

실버 5

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.Scanner;

public class Main {
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        int AN = sc.nextInt();
        int AM = sc.nextInt();
        int[][] A = readMatrix(sc, AN, AM);
        
        int BM = sc.nextInt();
        int BK = sc.nextInt();
        int[][] B = readMatrix(sc, BM, BK);
        
        int[][] result = multiplyMatrices(A, B);
        
        printMatrix(result);
    }
    
    private static int[][] readMatrix(Scanner sc, int rows, int cols) {
        int[][] matrix = new int[rows][cols];
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                matrix[i][j] = sc.nextInt();
            }
        }
        return matrix;
    }
    
    private static int[][] multiplyMatrices(int[][] A, int[][] B) {
        int AN = A.length;
        int AM = A[0].length;
        int BM = B.length;
        int BK = B[0].length;
        
        int[][] result = new int[AN][BK];
        
        for (int i = 0; i < AN; i++) {
            for (int j = 0; j < BK; j++) {
                for (int k = 0; k < AM; k++) {
                    result[i][j] += A[i][k] * B[k][j];
                }
            }
        }
        
        return result;
    }
    
    private static void printMatrix(int[][] matrix) {
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[0].length; j++) {
                System.out.print(matrix[i][j] + " ");
            }
            System.out.println();
        }
    }
    
}