Notice
Recent Posts
Recent Comments
Link
코테 탈출일지
[백준] 2740번: 행렬 곱셈 - 파이썬/python 본문
https://www.acmicpc.net/problem/2740
2740번: 행렬 곱셈
첫째 줄에 행렬 A의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 순서대로 주어진다. 그 다음 줄에는 행렬 B의 크기 M과 K가 주어진다. 이어서 M개의 줄에 행렬 B의 원소 K개
www.acmicpc.net
접근 방식
- 행렬곱 연산의 규칙 구현
코드 풀이
n, m = map(int, input().split())
a = []
for _ in range(n):
tmp = list(map(int, input().split()))
a.append(tmp)
m, k = map(int, input().split())
b = []
for _ in range(m):
tmp = list(map(int, input().split()))
b.append(tmp)
answer = [[0]*k for _ in range(n)] # n*k 형태의 정답 영행렬 생성
for i in range(n):
for j in range(m):
for h in range(k):
answer[i][h] += a[i][j]*b[j][h]
for x in range(n):
for y in range(k):
print(answer[x][y], end = ' ') # end = ' '로 이어 출력
print() # 줄바꿈
이 문제의 핵심은 행렬 계산을 삼중 for 루프로 구현하는 것입니다. 곱해지는 순서에서 각각의 지정해야 하는 변수인 n, m, k이 a, b 행렬에 어떤 순서대로 인덱싱되어야 하는지 헷갈릴 수 있지만, 다시 생각해보면 a 행렬은 a[0][0]부터 각각 a[n-1][m-1], b 행렬은 b[0][0]부터 각각 b[m-1][k-1], answer 행렬은 answer[0][0]부터 answer[n-1][k-1]까지의 범위를 가지기 때문에 코드상의 i, j, h를 적절한 위치에 삽입해주면 쉽게 풀 수 있습니다.
메모
print(content, end = ' ')를 사용하면 내용을 한 줄에 출력할 수 있습니다. 이때 각각의 내용 뒤에는 end에서 지정한 값이 들어가게 됩니다. (이 경우에는 빈칸)
'구현' 카테고리의 다른 글
[백준] 2669번: 직사각형 네개의 합집합의 면적 구하기 - 파이썬/python (0) | 2023.07.16 |
---|---|
[백준] 1476번: 날짜 계산 - 파이썬/python (0) | 2023.07.16 |
[백준] 1193번: 분수찾기 - 파이썬/python (0) | 2023.07.09 |
[백준] 1475번: 방 번호 - 파이썬/python (0) | 2023.07.08 |
[백준] 1158번: 요세푸스 문제 - 파이썬/python (0) | 2023.07.04 |