백준[1051] - 숫자 정사각형

문제

백준 1051 문제 보기

접근 방법

입력된 이차원 배열의 숫자들을 모두 순회하며 순차적으로 정사각형을 만들어 본다.

코드

#include <iostream>
#include <algorithm>

using namespace std;

int N, M, ans = 0;
char map[51][51];

int main() {
    cin >> N >> M;
    for(int r = 0; r < N; r ++) {
        for(int c = 0; c < M; c ++) {
            scanf(" %c", &map[r][c]);
        }
    }

    // 입력된 사각형의 변 중에 작은 값을 저장
    int num = min(N, M);

    // 모든 점을 순회하며 정사각형을 조회
    for(int r = 0; r < N; r ++) {
        for(int c = 0; c < M; c ++) {

            // 만들수 있는 가장 큰 정사각형까지 만듬
            for(int len = 0; len < num; len ++) {
                if(r + len < N && c + len < M) {
                    char s1 = map[r][c];
                    char s2 = map[r + len][c];
                    char s3 = map[r][c + len];
                    char s4 = map[r + len][c + len];

                    if((s1 == s2) && (s3 == s4) && (s1 == s3) && (s1 == s4) && (s2 == s3) && (s2 == s4) && (s3 == s4)) {
                        // 사이즈 저장
                        ans = max(ans, (len + 1) * (len + 1));
                    }
                }
            }
        }
    }

    cout << ans;
    return 0;
}
Share