Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

차근차근

백준 2740번 - 행렬곱셈(JAVA) 본문

알고리즘

백준 2740번 - 행렬곱셈(JAVA)

오늘은뭐하지 2023. 9. 15. 17:18

백준 2740번 - 행렬곱셈

 

2740번: 행렬 곱셈

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

www.acmicpc.net

보기 편하게 나타내면 다음과 같다

 

간단히 곱하는 과정을 보면 반복되는 여부에 따라 for문에 3개로 나눠진다

// 간단히 표현해 보면
for(i < A의 N){
	for(j < B의 K){
    	for(t < A의 M){
        	a[i][k] * b[k][j]
        }
    }
}
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    StringTokenizer token = new StringTokenizer(br.readLine());
    int N = Integer.parseInt(token.nextToken());
    int M = Integer.parseInt(token.nextToken());

    int a[][] = new int[N][M];

    for(int i=0; i<N; i++){
        token = new StringTokenizer(br.readLine());
        for(int j=0; j<M; j++){
            a[i][j] = Integer.parseInt(token.nextToken());
        }
    }

    token = new StringTokenizer(br.readLine());
    token.nextToken();
    int K = Integer.parseInt(token.nextToken());

    int b[][] = new int[M][K];

    for(int i=0; i<M; i++){
        token = new StringTokenizer(br.readLine());
        for(int j=0; j<K; j++){
            b[i][j] = Integer.parseInt(token.nextToken());
        }
    }

    int r[][] = 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++){
                r[i][j] += a[i][k] * b[k][j];
            }
        }
    }

    StringBuilder sb = new StringBuilder();

    for(int i=0; i<N; i++){
        for(int j=0; j<K; j++){
            sb.append(r[i][j]).append(' ');
        }
        sb.append("\n");
    }

    System.out.print(sb);

 

Comments