📌 LeetCode [867]: Transpose Matrix
🔗 문제 링크
문제 설명 📄
주어진 2D 행렬 matrix
를 전치 행렬로 변환하세요.
전치 행렬은 다음과 같은 규칙을 따릅니다:
result[i][j] = matrix[j][i]
문제 접근 방식 📋
- 전치 행렬의 구조 이해:
- 원래 행렬의 행(
i
)과 열(j
)의 값을 교환하여 새 행렬을 만듭니다. - 새 행렬의 크기는 원래 행렬의 열과 행의 크기가 뒤바뀝니다.
- 원래 행렬의 행(
- 결과 행렬 초기화:
- 전치 행렬을 저장할 크기와 초기값이 설정된 2D 배열을 생성합니다.
- 이중 반복문 사용:
- 원래 행렬을 순회하면서 값을 교환하여 새 행렬에 추가합니다.
Solution 💻
class Solution:
def transpose(self, matrix: List[List[int]]) -> List[List[int]]:
answer = [[0 for _ in range(len(matrix))] for _ in range(len(matrix[0]))]
for i in range(len(matrix[0])):
for j in range(len(matrix)):
answer[i][j] = matrix[j][i]
return answer
시간 복잡도 분석 ⏲️
- 시간 복잡도: (O(m x n))
- (m): 원래 행렬의 행 개수.
- (n): 원래 행렬의 열 개수.
- 모든 요소를 한 번 순회하며 전치 작업 수행.
공간 복잡도 분석 🗄️
- 공간 복잡도: (O(m x n))
- 전치 행렬
answer
를 저장하기 위해 동일한 크기의 추가 메모리 사용.
- 전치 행렬
리팩토링 🛠️
개선된 코드
class Solution:
def transpose(self, matrix: List[List[int]]) -> List[List[int]]:
return [[matrix[j][i] for j in range(len(matrix))] for i in range(len(matrix[0]))]
리팩토링 후 시간 복잡도 ⏲️
- 시간 복잡도: (O(m x n))
- 동일한 이중 반복문을 사용하므로 시간 복잡도는 변하지 않음.
리팩토링 후 공간 복잡도 🗄️
- 공간 복잡도: (O(m x n))
- 결과 행렬을 저장하기 위해 동일한 크기의 추가 메모리 사용.
'알고리즘' 카테고리의 다른 글
LeetCode [771]: Jewels and Stones (0) | 2024.12.14 |
---|---|
LeetCode [485]: Max Consecutive Ones (0) | 2024.12.13 |
LeetCode [1480]: Running Sum of 1d Array (1) | 2024.12.11 |
LeetCode [1598]: Crawler Log Folder (0) | 2024.12.10 |
LeetCode [1945]: Sum of Digits of String After Convert (0) | 2024.12.09 |