반응형
Notice
Recent Posts
Recent Comments
- Today
- Total
작심삼일
[백준] 1915번 | 가장 큰 정사각형 | Python 본문
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
반응형
'스터디 > 코테' 카테고리의 다른 글
[백준] 1932번 | 정수 삼각형 | C++ (0) | 2021.12.06 |
---|---|
[백준] 1929번 | 소수 구하기 | C++ (0) | 2021.12.02 |
[백준] 1904번 | 01타일 | Python (0) | 2021.11.29 |
[백준] 1850번 | 최대공약수 | C++ (0) | 2021.11.25 |
[백준] 1780번 | 종이의 개수 | C++ (0) | 2021.11.24 |
Comments