https://www.acmicpc.net/problem/1915
1915번: 가장 큰 정사각형
첫째 줄에 n, m(1 ≤ n, m ≤ 1,000)이 주어진다. 다음 n개의 줄에는 m개의 숫자로 배열이 주어진다.
www.acmicpc.net
문제
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개의 숫자로 배열이 주어진다.
출력
첫째 줄에 가장 큰 정사각형의 넓이를 출력한다.
예제 입력 1
4 4
0100
0111
1110
0010
예제 출력 1
4
#include <iostream>
#include <algorithm>
using namespace std;
int n, m;
int arr[1002][1002];
int map[1002][1002];
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
freopen("input.txt", "r", stdin);
cin >> n >> m;
for (int i = 0; i < n; i++)
{
string s;
cin >> s;
for (int j = 0; j < m; j++)
{
map[i][j] = s[j]-'0';
}
}
int ans = 0;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
if (map[i - 1][j - 1] == 1) {
arr[i][j] = min(arr[i - 1][j - 1], min(arr[i][j - 1], arr[i - 1][j])) + 1;
if (arr[i][j] > ans) ans = arr[i][j];
}
}
}
cout << ans * ans;
return 0;
}
'개발자 > algorithm' 카테고리의 다른 글
백준 9202번 : Boggle (c++) (0) | 2020.08.21 |
---|---|
백준 2243번 : 사탕상자 (c++) (0) | 2020.08.21 |
백준 2579번 : 계단 오르기 (c++) (0) | 2020.08.20 |
백준 11659번 : 구간 합 구하기 4 (c++) (0) | 2020.08.20 |
백준 1932번 : 정수 삼각형 (c++) (0) | 2020.08.20 |