티스토리 뷰

알고리즘/백준

[BAEKJOON] 2740 행렬 곱셈

응애~ 개발자 2022. 11. 21. 15:03
728x90
반응형

문제 요약

  • 알고리즘 분류: 구현
  • 난이도: Silver5
  • 문제내용:
    • 두개의 행렬을 주어지면 행렬 곱셈 한 결과를 구해라.
  • 사이트: https://www.acmicpc.net/problem/2740
 

2740번: 행렬 곱셈

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

www.acmicpc.net

문제풀이

 이번 문제는 고등학교 수학에 나오는 행렬 연산 문제이다. 행렬 곱셈 공식만 알면 문제 푸는데는 어려움이 없으니까 바로 밑에 코드보고 공부하면된다. 코드 보기전에 행렬 곱셈에 대한 원리를 알고 보면 될거 같다.

 

Code

Python

N, M = map(int, input().split())
A = [list(map(int, input().split())) for _ in range(N)]
M, K = map(int, input().split())
B =[list(map(int, input().split())) for _ in range(M)]
result = [[0] * K for _ in range(N)]

#  행렬 연산
for i in range(N):
    for j in range(K):
        for x in range(M):
            result[i][j] += A[i][x] * B[x][j]

for array in result:
    print(' '.join(map(str, array)))

Java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int N = Integer.parseInt(st.nextToken());
		int M = Integer.parseInt(st.nextToken());
		int[][] 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());
		M = Integer.parseInt(st.nextToken());
		int K = Integer.parseInt(st.nextToken());
		int[][] B = new int[M][K];
				
		for(int i = 0; i < M; i++) {
			st = new StringTokenizer(br.readLine());
			for(int j = 0; j < K; j ++) {
				B[i][j] = Integer.parseInt(st.nextToken());
			}
		}
		
		int[][] result = new int[N][K];
		
		for(int i = 0; i < N; i++) {
			for(int j = 0; j < K; j ++) {
				result[i][j] = 0;
				for(int x = 0; x < M; x++) {
					result[i][j] += A[i][x] * B[x][j];
				}
			}
		}
		
		StringBuilder sb = new StringBuilder();
		for(int i = 0; i < N; i++) {
			for(int j = 0; j < K; j ++) {
				sb.append(result[i][j]).append(" ");
			}
			sb.append("\n");
		}
		System.out.println(sb);
	}
	
}
728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
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
글 보관함