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

2023. 1. 17. 17:40알고리즘/브루트포스

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

 

1051번: 숫자 정사각형

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

www.acmicpc.net

 

풀이

완전 탐색인 듯해서 시간복잡도를 계산해보니 50*50*50정도 밖에 나오지 않았다.

그냥 완전 탐색을 돌려주었다.

 

 

전체 코드

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

	int N, M;
	int ans = 1;
	int board[51][51] = { 0, };
	cin >> N >> M;

	for (int i = 0; i < N; i++) {
		string s;
		cin >> s;
		for (int j = 0; j < s.size(); j++) board[i][j] = s[j] - '0';
	}

	for (int i = 0; i < N; i++) {
		for (int j = 0; j < M; j++) {
			for (int k = 1; k < min(N, M); k++) {
				if (i + k >= N || j + k >= M) break;
				if (board[i][j] == board[i + k][j + k] && board[i][j] == board[i][j + k] && board[i][j] == board[i + k][j]) {
					ans = max(ans, k + 1);
				}
			}
		}
	}

	cout << ans * ans;
}