문제 해석
-1 -2 6
-3 -6 12
-5 -10 18
코드
import java.io.*;
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(), " ");
StringBuilder sb = new StringBuilder(); //출력 값 쌓아두고 한꺼번에 출력하기 위해
int N = Integer.parseInt(st.nextToken()); //행렬 A의 N(행)
int M = Integer.parseInt(st.nextToken()); //행렬 A의 M(열)
int[][] A = new int[N][M]; //행렬 A
for(int i = 0; i < N; i++){ //행렬 A 값 넣기
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()); //행렬 B의 M(행)
int K = Integer.parseInt(st.nextToken()); //행렬 B의 K(열)
int[][] B = new int[M][K]; //행렬 B
for(int i = 0; i < M; i++){ //행렬 B 값 넣기
st = new StringTokenizer(br.readLine(), " ");
for(int j = 0; j < K; j++){
B[i][j] = Integer.parseInt(st.nextToken());
}
}
//행렬 곱셈 계산 반복문
for(int i = 0; i < N; i++){
for(int j =0; j < K; j++){
int sum = 0;
for(int k = 0; k < M; k++){
sum += A[i][k] * B[k][j];
}
// A의 i행의 j열 연산 값 출력 값에 저장
sb.append(sum).append(' ');
}
sb.append("\n");
}
System.out.println(sb);
}
}
결과
느낀 점
행렬 곱셈은 대학생때 이산수학이라는 과목으로 접한 거라 문제 푸는데는 큰 어려움이 없었지만,,,, 이 문제를 푸신 다른 분들의 코드를 보다가 스트라센 알고리즘으로 푼 코드를 발견했다...해당 알고리즘은 이해한 후 추후 추가할 수 있으면 추가할려고 한다:)