작심삼일

[백준] 1915번 | 가장 큰 정사각형 | Python 본문

스터디/코테

[백준] 1915번 | 가장 큰 정사각형 | Python

yun_s 2021. 12. 1. 10:07
728x90
반응형

문제 링크: https://www.acmicpc.net/problem/1915


문제

n×m의 0, 1로 된 배열이 있다. 이 배열에서 1로 된 가장 큰 정사각형의 크기를 구하는 프로그램을 작성하시오.

0 1 0 0
0 1 1 1
1 1 1 0
0 0 1 0

위와 같은 예제에서는 가운데의 2×2 배열이 가장 큰 정사각형이다. 


입력

첫째 줄에 n, m(1 ≤ n, m ≤ 1,000)이 주어진다. 다음 n개의 줄에는 m개의 숫자로 배열이 주어진다.


출력

첫째 줄에 가장 큰 정사각형의 넓이를 출력한다.


내 풀이

어떤 정사각형은 더 작은 정사각형들이 모인 것이라 볼 수 있다.

이를 이용해 다이나믹 프로그래밍으로 문제를 푼다.


코드

temp = input()
[N, M] = temp.split()
N = int(N)
M = int(M)
mat = [[0] * M for _ in range(N)]
maxi = 0

for n in range(N):
    temp = str(input())

    for m in range(M):
        mat[n][m] = int(temp[m])
        if mat[n][m] == 1:
            maxi = 1

for n in range(1, N):
    for m in range(1, M):
        if mat[n][m] == 1:
            mini = min(mat[n-1][m], mat[n][m-1], mat[n-1][m-1])

            if mini > 0:
                mat[n][m] = mini + 1
                maxi = max(mat[n][m], maxi)

print(maxi*maxi)
728x90
반응형
Comments