Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- programming
- Python
- 함수
- Pre-processing
- function
- Class
- pointer
- pass by reference
- 오블완
- vscode
- string
- baekjoon
- Deep Learning
- array
- 문자열
- C++
- 백준
- OOP
- const
- 파이썬
- raw data
- 알고리즘
- 티스토리챌린지
- assignment operator
- 포인터
- 배열
- predictive analysis
- Data Science
- Object Oriented Programming
- 반복문
Archives
- Today
- Total
Channi Studies
[LeetCode] 221. Maximal Square 본문
https://leetcode.com/problems/maximal-square/description/

이 문제를 풀기 위해서 nested for loop을 사용했습니다.
Input n x m 에 맞춰 각 반복문에서 현재 위치 기준으로 좌단, 상단, 좌상단 index를 모두 확인하여 그 중 최솟값에 + 1을 하는 전략을 취했습니다.
만약 현재 인덱스가 0이라면 해당 위치에서 구성할 수 있는 최대 사각형의 넓이 또한 0이므로, 즉시 다음 반복문으로 넘어갑니다.
매 반복문의 마지막에 max_num을 업데이트 해주면서, 최종적으로 길이의 제곱을 반환해 넓이 값을 리턴합니다.
def maximalSquare(self, matrix: List[List[str]]) -> int:
n = len(matrix)
m = len(matrix[0])
dp = [[0] * m for _ in range(n)]
max_num = 0
for i in range(n):
for j in range(m):
if matrix[i][j] == "0":
continue
left = top = diag = 0
if i > 0: left = int(dp[i-1][j])
if j > 0: top = int(dp[i][j-1])
if (i > 0) and (j > 0): diag = int(dp[i-1][j-1])
dp[i][j] = min(left, top, diag) + 1
max_num = max(dp[i][j], max_num)
return max_num ** 2
살짝 efficiency를 다듬은 코드는 다음과 같습니다.
def maximalSquare(self, matrix: List[List[str]]) -> int:
n = len(matrix)
m = len(matrix[0])
dp = [[0] * m for _ in range(n)]
max_num = 0
for i in range(n):
for j in range(m):
if matrix[i][j] == "0":
continue
if (i < 1) or (j < 1): dp[i][j] = 1
else: dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1
max_num = max(dp[i][j], max_num)
return max_num ** 2

'python' 카테고리의 다른 글
| nonlocal 변수 (1) | 2025.07.03 |
|---|---|
| Iterable, Iterator, Generator (0) | 2025.02.21 |
| Bitwise Operators (0) | 2025.02.21 |
| Files and Exceptions (0) | 2025.02.10 |
| Tuple 튜플 (0) | 2025.01.26 |