-
[LeetCode | Python] 221.Maximal Square개발/코드 2025. 6. 21. 17:39
문제
https://leetcode.com/problems/maximal-square/description/
- 0과 1로 채워진 m x n 이진 행렬이 주어졌을 때, 1만 포함된 가장 큰 정사각형을 찾아 넓이를 반환하기
풀이
dp로 풀이하면 간단하고, 동일 크기의 matrix에서 자기 자신의 인덱스가 1일 때 최솟값들을 하나씩 더해갔을 때, 가장 큰 값이 정사각형의 한 변의 길이와 동일하다.
class Solution: def maximalSquare(self, matrix: List[List[str]]) -> int: if not matrix or not matrix[0]: return 0 rows, cols = len(matrix), len(matrix[0]) dp = [[0] * cols for _ in range(rows)] max_side = 0 for i in range(rows): for j in range(cols): if matrix[i][j] == '1': if i == 0 or j == 0: dp[i][j] = 1 else: # 현재 위치 (i, j)가 '1'인 경우, # 왼쪽, 위쪽, 왼쪽 대각선 위 세 칸의 dp 값 중 최솟값에 1을 더합니다. dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1 # 길이 업데이트 max_side = max(max_side, dp[i][j]) return max_side * max_sideSample
결과
- 공간복잡도: $$ 또는 $$
- 시간복잡도: $$ 또는 $$
'개발 > 코드' 카테고리의 다른 글
티스토리에 Latex 수식 적용하기 (0) 2025.03.16 [Javascript] 고차함수 구현 예시 (0) 2023.06.01