본문 바로가기
백준

[백준] 2740번 : 행렬 곱셈 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2024. 7. 11.
728x90
반응형

 

https://www.acmicpc.net/problem/2740

 

1. 문제 설명

반응형

2. 풀이과정

해당 문제는 간단히 행렬 곱셈을 구현해 보는 문제이다.

행렬의 곱셈은 앞 행렬의 행을 차례대로 가져오고, 뒷 행렬의 열을 차례대로 가져와 각 위치에 있는 숫자를 서로 곱하여 더하면 결과 행렬의 값이 된다.

앞 행렬의 첫 번째 행 1, 2를 뒷 행렬 첫 번째 열 -1, 0을 각각 곱하여 더하면 1 x -1 + 2 x 0 = -1 이 되는 것이다.

이런 방식으로 행렬을 곱하면 위 그림과 같은 결과가 나오게 된다.

행렬의 곱셈 연산을 수행하는 함수를 구현하며 문제를 해결한다.

 

  1. sys.stdin.readline() 함수를 사용하기 위해 sys 모듈을 불러온다. import sys
  2. 첫 번째 행렬 A의 크기를 입력받는다. N, M = map(int, sys.stdin.readline().split())
  3. 첫 번째 행렬 A를 저장할 리스트를 생성한다. A = []
  4. 행 크기만큼 반복하며 한 줄씩 값들을 입력받아 공백을 기준으로 값을 분리하여 리스트로 변환하고 이를 행렬 A에 추가한다. for _ in range(N): A.append(list(map(int, sys.stdin.readline().split())))
  5. 두 번째 행렬 B의 크기를 입력받는다. M, K = map(int, sys.stdin.readline().split())
  6. 두 번째 행렬 B를 저장할 리스트를 생성한다. B = []
  7. 행 크기만큼 반복하며 한 줄씩 값들을 입력받아 공백을 기준으로 값을 분리하여 리스트로 변환하고 이를 행렬 B에 추가한다. for _ in range(M): B.append(list(map(int, sys.stdin.readline().split())))
  8. 행렬의 곱셈 연산을 수행하는 함수를 생성한다. def matrix_mul(a, b)
    1. 각 앞 행렬의 행 위치와 뒷 행렬의 열 위치를 각각 한 번씩 지정한다. for i in range(N): for j in range(K)
      1. 결과 행렬의 값을 저장할 변수를 생성하고 초기화한다. result = 0
      2. 지정한 행과 열에서 각 원소를 하나씩 불러오며 각 위치의 값을 곱하고 결과 값에 더한다. for k in range(M): result += a[i][k] * b[k][j]
      3. 한 행과 열의 곱셈 연산이 끝나면 결과를 줄 바꿈 없이 공백을 두고 출력한다. print(result, end = ' ')
    2. 앞 행렬의 한 행에 대한 뒷 행렬의 모든 열의 연산이 끝나고 다음 행으로 넘어가면 결과 행렬의 값 위치도 다음 행으로 넘어가므로 줄 바꿈을 해준다. print()
  9. 입력받은 행렬 A와 B를 곱하여 그 결과를 출력한다. matrix_mul(A, B)

3. 소스코드

import sys

N, M = map(int, sys.stdin.readline().split())

A = []
for _ in range(N):
    A.append(list(map(int, sys.stdin.readline().split())))

M, K = map(int, sys.stdin.readline().split())

B = []
for _ in range(M):
    B.append(list(map(int, sys.stdin.readline().split())))

def matrix_mul(a, b):
    for i in range(N):
        for j in range(K):
            result = 0
            for k in range(M):
                result += a[i][k] * b[k][j]
            print(result, end = ' ')
        print()

matrix_mul(A, B)
728x90
반응형