ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준 2740번] 행렬 곱셈
    Algorithm/기타 2020. 1. 8. 23:56

    백준알고리즘 2740번 : 행렬 곱셈

     

    크기 N, M인 행렬 A와 크기 M, K인 행렬 B가 주어진다.

    문제를 보면 알 수 있겠지만,

    행렬곱에서는 첫 번째 행렬(A)의 열(M)과 두 번째 행렬(B)의 행(M)이 일치해야 한다.

    그리고 N*M 와 M*K의 행렬 곱의 결과는 크기 N,K인 행렬이 된다.

    즉 첫 번째 행렬(A)의 행(N)의 높이를 갖고, 두 번째 행렬(B)의 열(K)의 길이를 갖게되는 것이다.

     

    이를 이해한 뒤, 행렬곱이 이루어지는 logic에 따라 for문을 구현해야한다.

    나는 3중 for문으로 구현하였다.

     

    4*2인 행렬 A와 2*4인 행렬 B를 예로 들어보자.

    AXB인 행렬 C는 4*4인 행렬이 될 것이다.

     

    1. A의 1행 1열에 담긴 값을 B의 1행 1열에 담긴 값들과 곱한다. (1번 수행) [for문 1번 수행]

    2. A의 1행 {2열, 3열, 4열}도 B의 1행 {2열, 3열, 4열}과 곱하므로, 1번의 과정을 4번 반복한다. [for문 1번 수행]

    3. 2번의 과정을 2행에도 진행해야하므로, 총 2번 반복한다. [for문 1번 수행]

     

     

    풀이 과정


    1. 크기 N, M인 행렬 A와 크기 M, K인 행렬 B를 받아 각각 행렬 변수에 집어넣는다.
    2. 3중 for문을 통해 행렬 곱을 수행한다.
    3. 계산된 행렬을 출력한다.

     

     

    소스 ▽

    더보기

     

    import java.util.Scanner;
    
    public class Main {// 2740번 행렬 곱셈
    
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		int columnN = sc.nextInt();
    		int rowN = sc.nextInt();
    		int[][] N = new int[columnN][rowN];
    
    		for (int i = 0; i < columnN; i++) {
    			for (int j = 0; j < rowN; j++) {
    				N[i][j] = sc.nextInt();
    			}
    		}
    
    		int columnM = sc.nextInt();
    		int rowM = sc.nextInt();
    		int[][] M = new int[columnM][rowM];
    
    		for (int i = 0; i < columnM; i++) {
    			for (int j = 0; j < rowM; j++) {
    				M[i][j] = sc.nextInt();
    			}
    		}
    
    		int[][] ans = new int[columnN][rowM];
    
    		for (int i = 0; i < columnN; i++) {
    			for (int j = 0; j < rowM; j++) {
    				for (int j2 = 0; j2 < columnM; j2++) {
    					ans[i][j] += N[i][j2] * M[j2][j];
    				}
    			}
    		}
    
    		for (int i = 0; i < ans.length; i++) {
    			for (int j = 0; j < ans[0].length; j++) {
    				System.out.print(ans[i][j] + " ");
    			}
    			System.out.println();
    		}
    
    	}
    }

     

     

     

     

    댓글

Designed by Tistory.