Notice
Recent Posts
Recent Comments
Link
반응형
공부혜옹
백준 1915 가장 큰 정사각형 본문
배열의 원소값이 1인 부분만 사각형의 일부가 될 수 있기 때문에 0인 부분을 제외하고 생각한다.
1을 만났을때 이것이 정사각형일지 아닐지를 판단하는것이 문제
1을 만날 경우 1의 왼쪽, 왼쪽 대각선위, 위쪽 총 세부분을 검사해 가장 작은 수를 찾아 +1해주면 그것이 해당 사각형 한변의 최대 길이가 된다.
이것을 식으로 표현하면 다음과 같다
arr[i][j] = min(arr[i-1][j], arr[i-1][j-1], arr[i][j-1]) +1
예상치 못하게 fail을 받은 문제인데
'다음 n개의 줄에는 m개의 숫자로 배열이 주어진다.'
이 주어지는 숫자 배열이 실제 숫자가 아니고 string으로 주어지기 때문에 int가 아닌 string으로 받아 인덱스 - 48을 해주어야한다.
#include <iostream>
#include <algorithm>
using namespace std;
int n, m;
int arr[1010][1010];
int min (int a, int b, int c) {
int min = a;
if (min > b) {
min = b;
}
if (min > c) {
min = c;
}
return min;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
for(int i = 1; i<=n; i++){
for(int j = 1; j<=m; j++){
cin >> arr[i][j];
}
}
int MAX = 0;
for(int i = 1; i<=n; i++){
for(int j = 1; j<=m; j++){
if(arr[i][j] != 0){
arr[i][j] = min(arr[i-1][j], arr[i-1][j-1], arr[i][j-1]) +1;
if(MAX < arr[i][j]){
MAX = arr[i][j];
}
}
}
}
cout << MAX * MAX;
return 0;
}
반응형
'공부합시다 > Algorithm' 카테고리의 다른 글
백준 15686 치킨배달 (0) | 2021.08.31 |
---|---|
백준 1339 단어수학 (0) | 2021.08.31 |
백준 2133 타일 채우기 (0) | 2021.08.16 |
백준 11057 오르막 수 (0) | 2021.08.15 |
백준 1043번 거짓말 (0) | 2021.07.27 |
Comments