본문 바로가기

Algorithm/Implementation

(C++) - 백준(BOJ) 1051번 : 숫자 정사각형 답

반응형

www.acmicpc.net/problem/1051

 

1051번: 숫자 정사각형

N*M크기의 직사각형이 있다. 각 칸은 한 자리 숫자가 적혀 있다. 이 직사각형에서 꼭짓점에 쓰여 있는 수가 모두 같은 가장 큰 정사각형을 찾는 프로그램을 작성하시오. 이때, 정사각형은 행 또는

www.acmicpc.net

간단한 구현문제였습니다.

 

풀이방법

 모든 길이에 대해 정사각형을 만들어본 후 꼭지점들의 값이 같으면 가장 긴 길이로 갱신해줍니다.

 

Code

#include <bits/stdc++.h>
using namespace std;

int n, m;
char square[51][51];

int main(){
    cin >> n >> m;
    int length = max(n,m);
    int ans = 1;
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= m; j++)
            cin >> square[i][j];
        
    for(int k = 1; k <= length; k++){
        for(int i = 1; i <= n ; i++){
            for(int j = 1; j <= m; j++){
                if(k + i > n || k + j > m) continue;
                int a1 = square[i][j]-'0';
                int a2 = square[i][j+k]-'0';
                int a3 = square[i+k][j]-'0';
                int a4 = square[i+k][j+k]-'0';
                if(a1==a2&&a2==a3&&a3==a4) ans = max(ans,(k+1)*(k+1));
            }
        }
    }
    cout << ans <<'\n';
}