📍 Matrix Multiplication Calculator
https://www.acmicpc.net/problem/15836
N이랑 P가 같아야지 곱할수 있는데, (A의 열 == B의 행)
두 번째 테스트케이스는 N과 P의 값이 각각 3, 2이므로 계산할 수 없다. => undefined
해야할 것은 총 4가지이다.
1. matrix 만들기
2. 계산하기
3. 출력조건
4. 종료조건
✨ 전체코드 ✨
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static BufferedReader sc = new BufferedReader(new InputStreamReader(System.in));
static StringTokenizer st;
static StringBuilder sb = new StringBuilder();
static int[][] A;
static int[][] B;
static int[][] C;
public static void main(String[] args) throws IOException {
int testcase = 1;
while (true) {
st = new StringTokenizer(sc.readLine());
int M = Integer.parseInt(st.nextToken());
int N = Integer.parseInt(st.nextToken());
int P = Integer.parseInt(st.nextToken());
int Q = Integer.parseInt(st.nextToken());
// 종료조건
if (M == 0 && N == 0 && P == 0 && Q == 0) break;
// 출력조건
sb.append("Case #").append(testcase).append(":\n");
// 1. matrix 만들기
A = new int[M][N];
B = new int[P][Q];
MakeMatrix(A, M, N);
MakeMatrix(B, P, Q);
if (N == P) {
// 2. 계산하기
C = new int[M][Q];
Calculator(M, N, Q);
// 출력조건
for (int i = 0; i < M; i++) {
sb.append("| ");
for (int j = 0; j < Q; j++) {
sb.append(C[i][j]).append(" ");
} sb.append("|\n");
}
} else sb.append("undefined\n"); // 계산불가
testcase++;
} System.out.print(sb);
}
// 1.
private static void MakeMatrix(int[][] array, int r, int c) throws IOException {
for (int i = 0; i < r; i++) {
st = new StringTokenizer(sc.readLine().trim());
for (int j = 0; j < c; j++) {
array[i][j] = Integer.parseInt(st.nextToken());
}
}
}
// 2.
private static void Calculator(int M, int N, int Q) {
for (int i = 0; i < M; i++) {
for (int j = 0; j < Q; j++) {
int sum = 0;
for (int k = 0; k < N; k++) {
sum += A[i][k] * B[k][j];
} C[i][j] = sum;
}
}
}
}
🌀 성능
- 메모리 : 14,316 KB
- 시간 : 136 ms
라떼는 정규교육과정에 행렬 없었다 ㅠ..
입출력 예시 그리면서 이산수학 기억 끄집어냈는데 행렬만 알면 어려운 문제는 아닌듯
'Algorithm > Boj' 카테고리의 다른 글
[JAVA | 백준] #18229 내가 살게, 아냐 내가 살게 🙋🏻♀️💳🙅🏻♂️🙋🏻♂️💳 (0) | 2024.07.09 |
---|---|
[JAVA | 백준] #1816 암호 키 🔐 (0) | 2024.07.09 |
[JAVA | 백준] #1237 정ㅋ벅ㅋ (0) | 2024.07.08 |
[JAVA | 백준] #10163 색종이 🟩🟧🟪 (0) | 2024.07.04 |
[JAVA | 백준] #25277 Culture shock 😱⚡️ (0) | 2024.07.03 |