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 |
Tags
- string
- pointer
- 포인터
- 반복문
- Class
- array
- pass by reference
- 백준
- assignment operator
- Deep Learning
- vscode
- Pre-processing
- baekjoon
- 알고리즘
- 오블완
- Python
- const
- 배열
- 함수
- Object Oriented Programming
- 문자열
- OOP
- predictive analysis
- 파이썬
- raw data
- 티스토리챌린지
- programming
- Data Science
- function
- C++
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' 카테고리의 다른 글
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 |
List 리스트 (0) | 2025.01.26 |