📌 LeetCode [2022]: Convert 1D Array Into 2D Array
🔗 문제 링크
문제 설명 📄
1차원 배열 original
과 행 개수 m
, 열 개수 n
이 주어졌습니다.
1차원 배열을 주어진 크기의 2차원 배열로 변환해야 합니다.
조건:
- 변환이 불가능하면 빈 배열을 반환합니다.
- 변환된 배열의 요소는
original
배열의 요소 순서를 유지해야 합니다.
문제 접근 방식 📋
- 조건 확인:
- 배열
original
의 길이와 주어진 2D 배열 크기 (m \times n)이 맞는지 확인합니다. - 길이가 맞지 않으면 변환할 수 없으므로 빈 배열을 반환합니다.
- 배열
- 행 단위로 원소 채우기:
- 각 원소를
row * n + col
방식으로 계산하여 적절히 배열에 배치합니다.
- 각 원소를
Solution 💻
class Solution:
def construct2DArray(self, original: List[int], m: int, n: int) -> List[List[int]]:
answer = []
count = 0
for row in range(m):
temp = []
for col in range(n):
if (row * n) + col >= len(original):
return []
temp.append(original[(row * n) + col])
count += 1
answer.append(temp)
return answer if count == len(original) else []
시간 복잡도 ⏲️
- 전체 요소 순회: (O(m x n)) ((m)은 행 개수, (n)은 열 개수).
- 최종 시간 복잡도: (O(m x n)).
공간 복잡도 🗄️
- 추가 공간: 2차원 배열 생성으로 (O(m x n)).
- 총 공간 복잡도: (O(m x n)).
리팩토링 🛠️
개선된 코드
class Solution:
def construct2DArray(self, original: List[int], m: int, n: int) -> List[List[int]]:
if len(original) != m * n:
return []
result = []
for i in range(m):
start = i * n
end = (i + 1) * n
result.append(original[start:end])
return result
리팩토링 후 시간 복잡도 ⏲️
- 슬라이싱 연산: (O(m x n)), 각 행에 대해 슬라이싱을 수행.
- 총 시간 복잡도: (O(m x n)).
리팩토링 후 공간 복잡도 🗄️
- 추가 공간: 2차원 배열 (O(m x n)).
- 총 공간 복잡도: (O(m x n)).
'알고리즘' 카테고리의 다른 글
LeetCode [2418]: Sort the People (0) | 2024.12.04 |
---|---|
LeetCode [2696]: Minimum String Length After Removing Substrings (0) | 2024.12.03 |
LeetCode [796]: Rotate String (0) | 2024.12.02 |
LeetCode [1331]: Rank Transform of an Array (0) | 2024.12.02 |
LeetCode [1331]: Rank Transform of an Array (0) | 2024.12.01 |