알고리즘 문제풀이/백준

[백준/BOJ] 1051번 숫자 정사각형 (C++)

노력의천재 2021. 11. 16. 17:34

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

 

1051번: 숫자 정사각형

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

www.acmicpc.net

문제의 이해가 좀 어려웠는데, 난이도는 쉬운 문제였다. 꼭지점의 값이 모두 같은 가장 큰 정사각형의 넓이를 찾는 완전 탐색(브루트 포스) 문제였다.

 

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

int map[51][51];

int main(void) {
	freopen("input.txt", "rt", stdin);
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	
	int n, m, answer = 1;
	cin >> n >> m;
	for(int i = 0; i < n; i++) {
		string num;
		cin >> num;
		for(int j = 0; j < num.size(); j++) {
			map[i][j] = num[j] - '0';
		}
	}
	
	for(int k = 2; k <= min(n, m); k++) {
		for(int i = 0; i < n - k + 1; i++) {
			for(int j = 0; j < m - k + 1; j++) {
				if(map[i][j] == map[i + k - 1][j] && map[i][j] == map[i][j + k - 1] && map[i][j] == map[i + k - 1][j + k - 1]) {
					answer = max(answer, k * k);
				}
			}
		}
	}

	cout << answer;
}