728x90
반응형
https://www.acmicpc.net/problem/1915
1915번: 가장 큰 정사각형
첫째 줄에 n, m(1 ≤ n, m ≤ 1,000)이 주어진다. 다음 n개의 줄에는 m개의 숫자로 배열이 주어진다.
www.acmicpc.net
풀이
문제를 해결하기 위해 우선 arr배열에 문제에서 주어진 배열을 넣었다.
그리고 dp배열을 (n+1)X(m+1)크기로 만들었다. 이유는 이전 값을 비교해야하기 때문이다.
만약 arr[i][j]가 0이면 정사각형을 만들 수 없으므로 넘어가고 1이면 dp[i+1][j],dp[i][j+1],dp[i][j]을 비교하여 가장 작은 값의 +1 값을 dp[i+1][j+1]에 넣어준다.
dp[i+1][j+1]에는 arr[i][j]를 정사각형의 우측하단 꼭짓점으로하여 만들수 있는 정사각형의 변의 길이를 저장합니다.
그리고 lens에는 최대 변의 길이를 저장할 수 있도록 if문을 이용했다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
n,m=map(int,input().split())
arr=[]
for _ in range(n):
arr.append(list(map(int, input())))
dp=[[0 for _ in range(m+1)] for _ in range(n+1)]
lens=0
for i in range(n):
for j in range(m):
if arr[i][j]==1:
dp[i+1][j+1]=min(dp[i+1][j],dp[i][j+1],dp[i][j])+1
if dp[i+1][j+1]>lens:
lens=dp[i+1][j+1]
print(lens**2)
|
cs |
728x90
반응형
'Python3 > 백준 알고리즘' 카테고리의 다른 글
2022.04.09 [백준] (파이썬 python) 빙산 (0) | 2022.04.09 |
---|---|
2022.03.29 [백준] (python 파이썬) 벽 부수고 이동하기 (0) | 2022.03.29 |
2022.03.18 [백준] (python 파이썬) 팰린드롬? (0) | 2022.03.18 |
2022.03.18 [백준] (python 파이썬) 평범한 배낭 (0) | 2022.03.18 |
2022.03.17 [백준] (python 파이썬) 케빈 베이컨의 6단계 법칙 (0) | 2022.03.17 |
댓글