1915번: 가장 큰 정사각형
첫째 줄에 n, m(1 ≤ n, m ≤ 1,000)이 주어진다. 다음 n개의 줄에는 m개의 숫자로 배열이 주어진다.
www.acmicpc.net
정사각형을 만족하기 위해서 어떤 규칙이 필요할까?
행렬 i, j 를 기준으로 왼쪽, 위, 왼쪽 위가 모두 1인 것만이 정사각형이 된다.
이걸 확장시켜주면, 최종적인 점화식은
물론 조건문으로 현재 위치가 1이고 그 주변도 1임을 미리 따져줘야 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
#include <cstdio>
#include <algorithm>
using namespace std;
int a[1001][1001], n, m;
int main() {
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= m; ++j)
scanf("%1d", &a[i][j]);
int res = 0;
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
if (a[i][j] && a[i - 1][j] && a[i][j - 1] && a[i - 1][j - 1]) {
a[i][j] += min({ a[i][j - 1], a[i - 1][j - 1], a[i - 1][j] });
}
res = max(res, a[i][j]);
}
}
printf("%d\n", res * res);
return 0;
}
|
cs |
a 배열에는 정사각형을 만족하는 크기가 들어가 있을테니 제곱의 형태로 출력해주면 된다.
'BOJ' 카테고리의 다른 글
BOJ 3190 뱀 (0) | 2020.12.19 |
---|---|
BOJ 1446 지름길 (0) | 2020.12.16 |
BOJ 7579 앱 (0) | 2020.12.13 |
BOJ 5052 전화번호 목록 (0) | 2020.12.10 |
BOJ 5014 스타트링크 (0) | 2020.12.10 |