🔗 1. 문제 URL
https://school.programmers.co.kr/learn/courses/30/lessons/12949?language=python3
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
📝 2. 문제 요구사항 정리
2차원 행렬 arr1과 arr2를 입력받아, 두 행렬을 곱한 결과를 반환하는 문제입니다. 선형대수학의 행렬 곱셈 연산 방식을 코드로 구현해야 합니다.
- 행렬 곱셈 조건: 앞 행렬의 열 개수와 뒤 행렬의 행 개수가 같아야 연산이 가능합니다. (문제 조건상 항상 만족합니다.)
- 결과 행렬의 크기: [arr1의 행(세로) 길이 × arr2의 열(가로) 길이] 크기의 새로운 행렬이 만들어집니다.
💡 3. 핵심 개념
✔ 1) 결과 행렬의 크기 예측 및 초기화
행렬 곱셈 결과의 크기는 row1 × col2가 됩니다. 연산 결과를 차곡차곡 더해나가기 위해 리스트 컴프리헨션을 사용하여 [[0] * col2 for i in range(row1)] 형태로 미리 0으로 채워진 빈 결과 행렬을 만들어두는 것이 정석입니다.
✔ 2) 3중 for문을 이용한 행렬 원소 연산
결과 행렬의 [i][j] 위치에 들어갈 값은 arr1의 $i$번째 행 원소들과 arr2의 $j$번째 열 원소들을 순서대로 곱해서 모두 더한 값입니다. 이를 위해 각각 행렬 1의 행(i), 행렬 2의 열(j), 그리고 연산이 겹치는 축(k)을 제어하는 3중 루프 구조가 필요합니다.
✔ 3) 행렬 인덱스 공식 수립
반복문 내부에서 누적 연산이 일어나는 핵심 공식은 다음과 같습니다:
answer[i][j] += arr1[i][k] * arr2[k][j]
arr1에서는 열 인덱스가 k로 움직이고, arr2에서는 행 인덱스가 k로 함께 움직이며 매칭됩니다.
✅ 4. 정답 Python 코드
def solution(arr1, arr2):
# A * B 행렬 곱셈을 하면 결과 행렬의 크기는
# [arr1의 세로 길이 * arr2의 가로 길이]
row1, col1 = len(arr1), len(arr1[0])
row2, col2 = len(arr2), len(arr2[0])
# 결과 행렬 크기에 맞게 0으로 초기화
answer = [[0] * col2 for i in range(row1)]
# 3중 for문을 통한 행렬 곱셈 구현
for i in range(row1):
for j in range(col2):
for k in range(col1): # col1 대신 row2를 넣어도 무방 (두 값은 같으므로)
answer[i][j] += arr1[i][k] * arr2[k][j]
return answer
💬 5. 풀이하면서 느낀 점
수학 책에서 손으로만 풀던 행렬의 곱셈 연산을 막상 2차원 컴퓨터 코드로 직접 구현하려고 하니 인덱스 구조를 짜는 과정에서 생각이 꽤 필요했던 문제였습니다.
문제를 해결하는 가장 큰 열쇠는 연산 결과로 도출될 새 행렬의 가로, 세로 크기를 정확히 정의하는 것과, 인덱스가 순환하는 공통 축의 범위를 올바르게 잡아내는 것이었습니다. 행렬의 arr1[i][k]와 arr2[k][j]에서 인덱스 k가 서로 맞물려 돌아가는 메커니즘을 시각적으로 정리해 볼 수 있어서 유익했습니다. 2차원 배열을 다루는 루프 제어를 동시에 점검해 볼 수 있었던 연습 문제였습니다.
궁금하신 점이나 포스팅에 대한 피드백이 있다면 댓글로 편하게 남겨주세요.
도움이 되셨다면 공감이나 댓글 한 줄 남겨주시면 포스팅을 이어가는 데 큰 힘이 됩니다. 😊
'코딩테스트 > 알고리즘' 카테고리의 다른 글
| [프로그래머스 LV.0] 배열 만들기 2 — Python 정답 & 해설 (0) | 2026.06.11 |
|---|---|
| [프로그래머스 LV.0] 배열 조각하기 — Python 정답 & 해설 (0) | 2026.06.11 |
| [프로그래머스 LV.1] 모의고사 — Python 정답 & 해설 (0) | 2026.05.21 |
| [프로그래머스 LV.1] 두 개 뽑아서 더하기 — Python 정답 & 해설 (0) | 2026.05.21 |
| [프로그래머스 LV.2] 조건에 맞는 개발자 찾기 — MySQL 정답 & 해설 (0) | 2025.11.27 |