※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 1051번 문제인 숫자 정사각형이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/1051
1051번: 숫자 정사각형
N*M크기의 직사각형이 있다. 각 칸은 한 자리 숫자가 적혀 있다. 이 직사각형에서 꼭짓점에 쓰여 있는 수가 모두 같은 가장 큰 정사각형을 찾는 프로그램을 작성하시오. 이때, 정사각형은 행 또는
www.acmicpc.net
주어진 배열의 첫 칸서부터 가능한 정사각형의 꼭짓점을 모두 살펴보자.
이미 찾은 크기의 정사각형보다 더 작은 정사각형은 찾을 필요가 없다. 그러므로 큰 정사각형을 찾는다면 그보다 더 작은 정사각형의 탐색에는 시간을 쓰지 말자.
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
using namespace std;
string board[50];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int N, M; cin >> N >> M;
for (int i = 0; i < N; i++) {
cin >> board[i];
}
int ans = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
int k = ans;
while (i + k < N && j + k < M) {
char c1 = board[i][j], c2 = board[i + k][j], c3 = board[i][j + k], c4 = board[i + k][j + k];
if (c1 == c2 && c2 == c3 && c3 == c4) ans = k + 1;
k++;
}
}
}
cout << ans * ans;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 1495 // C++] 기타리스트 (0) | 2022.06.10 |
---|---|
[BOJ 1965 // C++] 상자넣기 (0) | 2022.06.09 |
[BOJ 1034 // C++] 램프 (0) | 2022.06.07 |
[BOJ 1005 // C++] ACM Craft (0) | 2022.06.06 |
[BOJ 10889 // C++] Ancient symbol (0) | 2022.06.05 |