백준 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;
}
'알고리즘 > 브루트포스' 카테고리의 다른 글
백준 2309번: 일곱 난쟁이 (C++) (0) | 2023.01.21 |
---|---|
백준 10974번: 모든 순열 (C++) (1) | 2023.01.21 |
백준 2890번: 카약 (C++) (0) | 2023.01.19 |
백준 1057번: 토너먼트 (C++) (0) | 2023.01.17 |
백준 2231번: 분해합 (C++) (0) | 2023.01.16 |