반응형

https://www.acmicpc.net/problem/1915

 

1915번: 가장 큰 정사각형

첫째 줄에 n, m(1 ≤ n, m ≤ 1,000)이 주어진다. 다음 n개의 줄에는 m개의 숫자로 배열이 주어진다.

www.acmicpc.net

 

현재 위치의 왼, 위, 왼위 대각선이 1이라면, 현재 지점은 정사각형에 포함될 수 있습니다.

arr[i][j] = 세 지점 중 가장 작은 값 + 1로 현재 지점을 업데이트해줍니다.

 

#include <iostream>
#include <algorithm>
using namespace std;

int n, m, ans;
int arr[1000][1000];
int main() {
	scanf("%d %d", &n, &m);
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			scanf("%1d", &arr[i][j]);
			ans = max(ans, arr[i][j]);
		}
	}
	for (int i = 1; i < n; i++) {
		for (int j = 1; j < m; j++) {
			if (arr[i][j] == 1) {
				if (arr[i - 1][j - 1] && arr[i][j - 1] && arr[i - 1][j]) {
					arr[i][j] = min({ arr[i - 1][j - 1], arr[i][j - 1], arr[i - 1][j] }) + 1;
					ans = max(ans, arr[i][j]);
				}
			}
		}
	}
	printf("%d", ans * ans);
}
반응형

'Algorithm' 카테고리의 다른 글

백준 2411 : 아이템 먹기  (0) 2021.11.17
백준 17244 : 아맞다우산  (0) 2021.11.17
백준 2109 : 순회강연  (0) 2021.11.17
백준 16947 : 서울 지하철 2호선  (0) 2021.11.17
백준 14938 : 서강그라운드  (0) 2021.11.17

+ Recent posts