[ 문제 ]
1915번: 가장 큰 정사각형
첫째 줄에 n, m(1 ≤ n, m ≤ 1,000)이 주어진다. 다음 n개의 줄에는 m개의 숫자로 배열이 주어진다.
www.acmicpc.net
[ 접근방법 ]
현재 위치를 7시 방향 꼭짓점으로 하여 만들 수 있는 가장 큰 정사각형의 변의 길이를 dp table에 저장한다.
12시, 9시, 11시 방향의 값을 비교하여 현재 위치의 값을 갱신하면 된다.
[ 소스코드 ]
#include <iostream>
#include <algorithm>
using namespace std;
int n, m, dt[1010][1010], ans;
string s;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
cin >> s;
for (int j = 1; j <= m; j++)
{
int cnt;
cnt = min(dt[i - 1][j - 1], min(dt[i - 1][j], dt[i][j - 1]));
if (s[j - 1] == '1')
dt[i][j] = cnt + 1;
ans = max(ans, dt[i][j]);
}
}
cout << ans * ans;
return 0;
}
'PS' 카테고리의 다른 글
[ 백준 / C++ ] 14940 : 쉬운 최단거리 (0) | 2024.04.25 |
---|---|
[ 백준 / C++ ] 11779 : 최소비용 구하기 2 (0) | 2024.04.24 |
[ 백준 / C++ ] 8979 : 올림픽 (0) | 2024.04.22 |
[ 백준 / C++ ] 1202 : 보석 도둑 (0) | 2024.04.19 |
[ 백준 / C++ ] 18111 : 마인크래프트 (0) | 2024.04.18 |