전치행렬(Transpose)이란?
n×n 크기의 행렬 M이 주어졌을 때, 해당 행렬의 전치행렬(transpose)을 구해야 합니다. 전치행렬은 원래 행렬의 행과 열의 위치를 서로 맞바꾼 행렬로, 모든 r과 c에 대해 matrix[r][c] = matrix[c][r]라는 관계가 성립합니다.
입력 예시
| 7 | 2 | 6 |
| 3 | 7 | 2 |
| 5 | 3 | 7 |
출력 결과
| 7 | 3 | 5 |
| 2 | 7 | 3 |
| 6 | 2 | 7 |
위 예시에서 확인할 수 있듯이, 입력 행렬의 각 열이 출력 행렬의 행으로 그대로 변환됩니다.
해결 절차
다음 단계를 따르면 문제를 쉽게 해결할 수 있습니다.
- 빈 리스트 M을 생성합니다.
- 변수 tracker를 0으로 초기화합니다.
- tracker가 행렬의 행 개수보다 작은 동안 아래 과정을 반복합니다.
- 임시 리스트 temp를 생성합니다.
- 행렬의 각 행(row)에 대해 row[tracker] 요소를 temp에 추가합니다.
- 완성된 temp를 M의 한 행으로 추가합니다.
- tracker 값을 1 증가시킵니다.
- 모든 반복이 끝나면 M을 반환합니다.
파이썬 구현 예제
class Solution:
def solve(self, matrix):
M = []
tracker = 0
while tracker < len(matrix):
temp = []
for row in matrix:
temp += [row[tracker]]
M += [temp]
tracker += 1
return M
ob = Solution()
matrix = [[7, 2, 6], [3, 7, 2], [5, 3, 7]]
print(ob.solve(matrix))
입력
[[7, 2, 6],
[3, 7, 2],
[5, 3, 7]]
출력
[[7, 3, 5], [2, 7, 3], [6, 2, 7]]
더 간결한 방법: zip() 함수 활용하기
파이썬에서는 내장 함수 zip()을 사용하면 위 로직을 단 한 줄로 표현할 수 있습니다. zip(*matrix)는 언패킹 연산자를 활용해 행렬의 각 열을 묶어주므로, 전치행렬을 구하는 가장 파이써닉(Pythonic)한 방법으로 꼽힙니다.
def transpose(matrix):
return [list(row) for row in zip(*matrix)]
matrix = [[7, 2, 6], [3, 7, 2], [5, 3, 7]]
print(transpose(matrix))
# 출력: [[7, 3, 5], [2, 7, 3], [6, 2, 7]]
정리
전치행렬은 행과 열을 맞바꾸는 간단한 연산이지만, 선형 대수 계산이나 이미지 처리 등 다양한 분야에서 널리 활용됩니다. 반복문으로 직접 구현하면 알고리즘의 동작 원리를 깊이 이해할 수 있으며, 실무에서는 zip(*matrix)처럼 간결하고 효율적인 방식을 사용하는 것이 좋습니다.