#1051. 숫자 정사각형

sese·2022년 11월 30일
0

백준

목록 보기
6/8

2차원 배열의 각 요소를 시작점으로 정사각형 한 변의 길이(l)를 1 부터 min(n,m)-1 까지 1 씩 늘리며 꼭짓점을 비교하여 모두 같을 시 변의 길이를 최대로 업데이트 한다.
이 때, 4개의 꼭짓점이 모두 범위 안에 있어야 하므로 i+l<n && j+l<m이 만족하는지 먼저 확인한다.

cpp

int n, m;
int arr[50][50];

// 꼭짓점이 범위 안에 있는지 확인하기
bool in_range(int i, int j, int l) {
    return (i+l < n && j+l < m);
}

int main() {
    
    ios::sync_with_stdio(0); cin.tie(0);

    int side = 1;
    cin >> n >> m;
    
    // 입력 받은 값 2차원 배열에 저장하기
    for (int i=0; i<n; i++) {
        
        // 문자열로 입력 받아서
        string row;
        cin >> row;
        
        for (int j=0; j<m; j++) {
            // 한 문자씩 int로 변환 후 저장
            arr[i][j] = row[j] - '0';
        }
        
    }
    
    // 배열의 원소 - arr[i][j]를 하나씩 돌면서 만들 수 있는 정사각형 꼭짓점 확인
    for (int i=0; i<n; i++) {
        for (int j=0; j<m; j++) {
            for (int l=1; l<min(n,m); l++) {
            	// in_range()로 범위를 먼저 확인해야 잘못된 인덱스에 접근했다는 에러가 뜨지 않는다
                // 꼭짓점 4개 : arr[i][j], arr[i+l][j], arr[i][j+l], arr[i+l][j+l]
                if (in_range(i, j, l) && arr[i][j] == arr[i+l][j] && arr[i][j] == arr[i][j+l] && arr[i][j] == arr[i+l][j+l]) {
                    // 정사각형 한 변의 길이 = l + 1
                    side = max(side, l + 1);
                }
            }
        }
    }
    cout << side * side;
}
profile
예전 글은 다크모드로 봐야 잘 보일 수도 있습니다.

0개의 댓글