https://www.acmicpc.net/problem/2740
- 예제 입력1
3 2
1 2
3 4
5 6
2 3
-1 -2 0
0 0 3
- 예제 출력1
-1 -2 6
-3 -6 12
-5 -10 18
- 문제 접근
- A[0][0] * B[0][0] + A[0][1] * B[1][0] = 1 * -1 + 2 * 0 = -1
- A[0][0] * B[0][1] + A[0][1] * B[1][1] = 1 * -2 + 2 * 0 = -2
- A[0][0] * B[0][2] + A[0][1] * B[1][2] = 1 * 0 + 2 * 3 = 6
- A[1][0] * B[0][0] + A[1][1] * B[1][0] = 3 * -1 + 4 * 0 = -3
- A[1][0] * B[0][1] + A[1][1] * B[1][1] = 3 * -2 + 4 * 0 = -6
- A[1][0] * B[0][2] + A[1][1] * B[1][2] = 3 * 0 + 4 * 3 = 12
- A의 행 * B의 열을 반복
- 문제 해결
- 총 반복 횟수는 N * K번
- A[3][2] * B[2][3]을 했을 때 [3][3]의 행렬이 결과
- 즉, A[N][M] * B[M][K] ⇒ C[N][K] 행렬 생성
- C[0][0]에는 A[0][0] * B[0][0] + A[0][1] * B[1][0]
- A의 뒤(열), B의 앞(행)이 동일
- 슈도 코드
N(행 저장), M(열 저장)
A[N][M] (2차원 배열 선언)
for(N번 반복)
for(M번 반복)
A[N][M]에 값 입력
M(행 저장), K(열 저장)
B[M][K] (2차원 배열 선언
for(M번 반복)
for(K번 반복)
B[M][K]에 값 입력
C[N][K] (2차원 배열 선언)
for(i=0 ~ N번 반복){
for(j=0 ~ M번 반복){
for(k=0 ~ K번 반복){
C[i][j] += A[i][k] * B[k][j]
}
}
}
for(int[] tmp : C){
tmp 출력
}
- 코딩하기
public static void main(String[] args) throws Exception{
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());
}
}
StringBuilder sb = new StringBuilder();
int[][] C = 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++){
C[i][j] += A[i][k] * B[k][j];
}
sb.append(C[i][j]).append(' ');
}
sb.append("\n");
}
System.out.println(sb);
}
'Coding Test > Problem Number' 카테고리의 다른 글
[Java] 영식이의 손가락 [2740번] (0) | 2024.07.18 |
---|---|
[Java] 방 번호 [2740번] (0) | 2024.07.18 |
[Java] 2차원 배열의 합 [2167번] (0) | 2024.07.18 |
[Java] 수들의 합5 [2018번] (0) | 2024.07.18 |
[Java] 수들의 합2 [2003번] (0) | 2024.07.18 |