728x90
반응형
https://www.acmicpc.net/problem/2740
1. 문제 설명
반응형
2. 풀이과정
해당 문제는 간단히 행렬 곱셈을 구현해 보는 문제이다.
행렬의 곱셈은 앞 행렬의 행을 차례대로 가져오고, 뒷 행렬의 열을 차례대로 가져와 각 위치에 있는 숫자를 서로 곱하여 더하면 결과 행렬의 값이 된다.
앞 행렬의 첫 번째 행 1, 2를 뒷 행렬 첫 번째 열 -1, 0을 각각 곱하여 더하면 1 x -1 + 2 x 0 = -1 이 되는 것이다.
이런 방식으로 행렬을 곱하면 위 그림과 같은 결과가 나오게 된다.
행렬의 곱셈 연산을 수행하는 함수를 구현하며 문제를 해결한다.
- sys.stdin.readline() 함수를 사용하기 위해 sys 모듈을 불러온다. import sys
- 첫 번째 행렬 A의 크기를 입력받는다. N, M = map(int, sys.stdin.readline().split())
- 첫 번째 행렬 A를 저장할 리스트를 생성한다. A = []
- 행 크기만큼 반복하며 한 줄씩 값들을 입력받아 공백을 기준으로 값을 분리하여 리스트로 변환하고 이를 행렬 A에 추가한다. for _ in range(N): A.append(list(map(int, sys.stdin.readline().split())))
- 두 번째 행렬 B의 크기를 입력받는다. M, K = map(int, sys.stdin.readline().split())
- 두 번째 행렬 B를 저장할 리스트를 생성한다. B = []
- 행 크기만큼 반복하며 한 줄씩 값들을 입력받아 공백을 기준으로 값을 분리하여 리스트로 변환하고 이를 행렬 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()
- 각 앞 행렬의 행 위치와 뒷 행렬의 열 위치를 각각 한 번씩 지정한다. for i in range(N): for j in range(K)
- 입력받은 행렬 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
반응형
'백준' 카테고리의 다른 글
[백준] 1654번 : 랜선 자르기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2024.07.23 |
---|---|
[백준] 6549번 : 히스토그램에서 가장 큰 직사각형 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2024.07.22 |
[백준] 11444번 : 피보나치 수 6 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2024.07.20 |
[백준] 10830번 : 행렬 제곱 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2024.07.19 |
[백준] 11401번 : 이항 계수 3 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2024.07.10 |
[백준] 1629번 : 곱셈 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2024.07.09 |
[백준] 1780번 : 종이의 개수 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2024.07.08 |
[백준] 1992번 : 쿼드트리 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2024.07.05 |