내가 생각했을때 문제에서 원하는부분
첫째 줄에 N과 M이 주어진다.
N과 M은 50보다 작거나 같은 자연수이다.
둘째 줄부터 N개의 줄에 수가 주어진다.
첫째 줄에 정답 정사각형의 크기를 출력한다.
내가 이 문제를 보고 생각해본 부분
BufferedReader와 StringTokenizer를 사용하여 입력을 받는다.
첫 줄에서 N과 M을 읽고, 다음 N줄에서 숫자로 구성된 직사각형을 입력받는다.
grid 배열에 직사각형의 각 요소를 저장한다.
maxSize 변수를 초기화하여 최대 정사각형 크기를 저장할 준비를 한다.
두 개의 중첩된 루프를 사용하여 각 칸을 정사각형의 꼭짓점으로 설정하고 가능한 최대 크기를 탐색한다.
각 정사각형의 네 꼭짓점이 같은지 확인하고, 만약 같다면 maxSize를 갱신한다.
모든 탐색이 끝난 후, maxSize의 제곱을 출력하여 가장 큰 정사각형의 넓이를 출력한다.
코드로 구현
package baekjoon.baekjoon_24;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
// 백준 1051번 문제
public class Main849 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
char[][] grid = new char[N][M];
for(int i = 0; i < N; i++) {
grid[i] = br.readLine().toCharArray();
}
int maxSize = 1; // 최소 정사각형 크기는 1
// 모든 좌표를 정사각형의 꼭짓점으로 설정하고 가능한 최대 크기를 검사
for(int i = 0; i < N; i++) {
for(int j = 0; j < M; j++) {
// 현재 위치를 꼭짓점으로 하는 정사각형의 최대 크기 탐색
for(int size = 1; i + size - 1 < N && j + size - 1 < M; size++) {
// 꼭짓점이 같은지 확인
char topLeft = grid[i][j];
char topRight = grid[i][j + size - 1];
char bottomLeft = grid[i + size - 1][j];
char bottomRight = grid[i + size - 1][j + size - 1];
if(topLeft == topRight && topLeft == bottomLeft && topLeft == bottomRight) {
maxSize = Math.max(maxSize, size);
}
}
}
}
System.out.println(maxSize * maxSize); // 정사각형의 크기 출력 (넓이)
br.close();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.