아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

행렬 곱셈 계산기

시간 제한2초메모리 제한512 MB

요약
행렬 두 개와 각 행렬의 크기를 여러 테스트 케이스로 입력받아, 안쪽 차원이 맞으면 곱셈 결과를 각 행을 세로 막대로 감싸 출력하고 맞지 않으면 undefined를 출력한다.
난이도

쉬움10점 중 2점

유형
구현, 행렬, 수학, 완전 탐색
정답자
아직 제출이 없습니다

문제

행렬 곱셈은 선형대수학의 기본 연산으로, 수학의 각 분야와 응용수학, 컴퓨터 그래픽스, 물리학, 공학에서 널리 쓰인다.

두 행렬은 차원이 맞아떨어질 때에만 곱할 수 있다. 즉, 첫 번째 행렬의 열 개수가 두 번째 행렬의 행 개수와 같아야 한다.

A=[aij]A = [a_{ij}]가 m×nm \times n 행렬이고 B=[bij]B = [b_{ij}]가 n×qn \times q 행렬이면, 곱 ABAB는 m×qm \times q 행렬이다. 곱 ABAB는 다음과 같이 정의되는 m×qm \times q 행렬 C=[cij]C = [c_{ij}]이다.

cij=∑k=1naikbkjc_{ij} = \sum_{k=1}^{n} a_{ik} b_{kj}

두 행렬을 곱한 결과를 출력하는 계산기를 만들어라. 두 행렬을 곱할 수 없으면 undefined를 출력한다.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫 줄에는 4개의 양의 정수 M,N,P,QM, N, P, Q가 주어진다 (1≤M,N,P,Q≤201 \le M, N, P, Q \le 20). MM과 NN은 행렬 AA의 크기, PP와 QQ는 행렬 BB의 크기이다. 이어서 MM줄에 행렬 AA의 원소가, 그 다음 PP줄에 행렬 BB의 원소가 주어진다. 각 행에는 해당 행의 원소들이 공백 하나로 구분되어 주어진다. M,N,P,QM, N, P, Q가 모두 00이면 입력의 끝이며, 이 줄은 처리하지 않는다.

출력

각 테스트 케이스마다 첫 줄에 Case #x:를 출력한다. 여기서 xx는 11부터 시작하는 케이스 번호이다. 다음 줄부터 행렬 곱셈 결과를 출력한다. 곱할 수 있는 경우에는 결과 행렬의 각 행을 |로 감싸서 | 원소들 | 형태로 한 줄에 하나씩 출력하며, 원소 사이에는 공백 하나를 둔다. 곱할 수 없는 경우에는 undefined 한 줄을 출력한다.

예제1

  1. 예제 1

    입력
    2 3 3 2
    1 2 3
    3 2 1
    4 5
    6 7
    8 9
    2 3 2 3
    1 2 3
    3 2 1
    4 5 6
    7 8 9
    0 0 0 0
    
    예상 출력
    Case #1:
    | 40 46 |
    | 32 38 |
    Case #2:
    undefined