※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 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

+ Recent posts