본문 바로가기
알고리즘 & PS

[BOJ] 가장 큰 정사각형 (1915, G4)

by 다람이도토리 2024. 11. 25.

 

문제 풀이 과정

간단한 DP 문제입니다. 순서대로 점을 탐색하며, 현재 위치에서 만들 수 있는 가장 큰 정사각형을 찾습니다.
정사각형은 4개의 꼭지점이 만들고.. 이는 현재 점의 좌측, 위측, 왼쪽 위측에서 정사각형을 만들어주고 있나?로 탐색합니다.

import sys
input = sys.stdin.readline

rows, cols = map(int, input().split())
maps = []
for _ in range(rows):
    cur_row = list(str(input().rstrip()))
    cur_row = [int(x) for x in cur_row]
    maps.append(cur_row)

dp = [[0 for _ in range(cols)] for _ in range(rows)]

max_size = 0
for i in range(rows):
    for j in range(cols):
        if i == 0 or j == 0:
            if maps[i][j] == 1:
                dp[i][j] = 1
                if max_size == 0:
                    max_size = 1
            else:
                dp[i][j] = 0
        else:
            if maps[i][j] == 0:
                dp[i][j] = 0
            else:
                dp[i][j] = min(dp[i-1][j], dp[i-1][j-1], dp[i][j-1]) + 1
                max_size = max(max_size, dp[i][j])
print(max_size ** 2)

'알고리즘 & PS' 카테고리의 다른 글

[BOJ] 성냥개비 (3687, G2)  (1) 2024.12.02
[BOJ] 욕심쟁이 판다 (1937, G3)  (1) 2024.11.28
[BOJ] n제곱 계산 (12728, P1)  (0) 2024.11.25
[BOJ] 파이프 옮기기 1 (17070, G5)  (0) 2024.11.24
[BOJ] 텀 프로젝트 (9466, G3)  (0) 2024.11.24