행렬 두 개와 각 행렬의 크기를 여러 테스트 케이스로 입력받아, 안쪽 차원이 맞으면 곱셈 결과를 각 행을 세로 막대로 감싸 출력하고 맞지 않으면 undefined를 출력한다.
행렬 곱셈은 선형대수학의 기본 연산으로, 수학의 각 분야와 응용수학, 컴퓨터 그래픽스, 물리학, 공학에서 널리 쓰인다.
두 행렬은 차원이 맞아떨어질 때에만 곱할 수 있다. 즉, 첫 번째 행렬의 열 개수가 두 번째 행렬의 행 개수와 같아야 한다.
A=[aij]A = [a_{ij}]A=[aij]가 m×nm \times nm×n 행렬이고 B=[bij]B = [b_{ij}]B=[bij]가 n×qn \times qn×q 행렬이면, 곱 ABABAB는 m×qm \times qm×q 행렬이다. 곱 ABABAB는 다음과 같이 정의되는 m×qm \times qm×q 행렬 C=[cij]C = [c_{ij}]C=[cij]이다.
cij=∑k=1naikbkjc_{ij} = \sum_{k=1}^{n} a_{ik} b_{kj}cij=∑k=1naikbkj
두 행렬을 곱한 결과를 출력하는 계산기를 만들어라. 두 행렬을 곱할 수 없으면 undefined를 출력한다.
undefined
입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫 줄에는 4개의 양의 정수 M,N,P,QM, N, P, QM,N,P,Q가 주어진다 (1≤M,N,P,Q≤201 \le M, N, P, Q \le 201≤M,N,P,Q≤20). MMM과 NNN은 행렬 AAA의 크기, PPP와 QQQ는 행렬 BBB의 크기이다. 이어서 MMM줄에 행렬 AAA의 원소가, 그 다음 PPP줄에 행렬 BBB의 원소가 주어진다. 각 행에는 해당 행의 원소들이 공백 하나로 구분되어 주어진다. M,N,P,QM, N, P, QM,N,P,Q가 모두 000이면 입력의 끝이며, 이 줄은 처리하지 않는다.
각 테스트 케이스마다 첫 줄에 Case #x:를 출력한다. 여기서 xxx는 111부터 시작하는 케이스 번호이다. 다음 줄부터 행렬 곱셈 결과를 출력한다. 곱할 수 있는 경우에는 결과 행렬의 각 행을 |로 감싸서 | 원소들 | 형태로 한 줄에 하나씩 출력하며, 원소 사이에는 공백 하나를 둔다. 곱할 수 없는 경우에는 undefined 한 줄을 출력한다.
Case #x:
|
| 원소들 |