📌 LeetCode [59]: Spiral Matrix II
🔗 문제 링크
문제 설명 📄
정수 ( n )이 주어질 때, ( n \times n ) 크기의 나선형 행렬을 생성하여 반환하는 문제입니다. 행렬은 1부터 ( n^2 )까지의 숫자로 채워집니다.
예제 입력/출력
- 입력: ( n = 3 )
- 출력:
[[1, 2, 3], [8, 9, 4], [7, 6, 5]]
문제 접근 방식 📋
- 2D 행렬 초기화:
- ( n \times n ) 크기의 행렬을 0으로 초기화합니다.
- 나선형으로 값 채우기:
top
,bottom
,left
,right
경계를 설정하여 나선형으로 값을 채웁니다.- 각 방향(오른쪽, 아래, 왼쪽, 위)으로 이동할 때마다 경계를 업데이트합니다.
- 반복문 종료 조건:
top > bottom
또는left > right
가 되면 모든 칸이 채워졌으므로 종료.
Solution 💻
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
answer = [[0 for _ in range(n)] for _ in range(n)]
number = 0
top, bottom = 0, n - 1
left, right = 0, n - 1
while top <= bottom and left <= right:
# 오른쪽으로 이동
for col in range(left, right + 1):
number += 1
answer[top][col] = number
top += 1
# 아래로 이동
for row in range(top, bottom + 1):
number += 1
answer[row][right] = number
right -= 1
# 왼쪽으로 이동
if left <= right:
for col in range(right, left - 1, -1):
number += 1
answer[bottom][col] = number
bottom -= 1
# 위로 이동
if top <= bottom:
for row in range(bottom, top - 1, -1):
number += 1
answer[row][left] = number
left += 1
return answer
시간 복잡도 분석 ⏲️
- 시간 복잡도: (O(n^2))
- (n \times n) 크기의 모든 원소를 한 번씩 순회하며 값을 할당.
- 공간 복잡도: (O(n^2))
- 결과 행렬을 저장하기 위한 공간.
'알고리즘' 카테고리의 다른 글
LeetCode [206]: Reverse Linked List (0) | 2024.11.27 |
---|---|
LeetCode [83]: Remove Duplicates from Sorted List (0) | 2024.11.26 |
LeetCode [54]: Spiral Matrix (0) | 2024.11.25 |
LeetCode [211]: Design Add and Search Words Data Structure (0) | 2024.11.25 |
LeetCode [11]: Container With Most Water (0) | 2024.11.25 |