ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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
Designed by Tistory.