간단하게 생각해보면 이중 for 루프로 좌측 상단 꼭지점을 기준으로 정사각형이 만들어지는지 탐색한다.
하지만 탐색을 위해서는
좌측 상단 꼭지점을 기준으로 오른쪽으로 탐색하여 M-1 인덱스까지 같은 숫자가 있는지, 아래쪽으로 탐색하며 N-1 인덱스까지 같은 숫자가 있는지, 대각선 방향으로 같은 숫자가 있는지 탐색해야 하므로 3중 for 루프를 사용한다.
여기서 고려해야 할 점, 좌측 상단 꼭지점과 같은 거리에 있는 우측 상단 꼭지점, 좌측 하단 꼭지점과 우측 하단 꼭지점의 숫자가 같으면 정사각형을 이루므로 해당 정사각형의 넓이를 구한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws NumberFormatException, 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());
String arr[][] = new String[N][M];
for(int i=0; i<N; i++) {
String str[] = br.readLine().split("");
arr[i] = str;
}
int max = 1;
for(int i=0; i<N-1; i++) {
for(int j=0; j<M-1; j++) {
for(int k=j+1; k<M; k++) {
if((i+(k-j))<N && (j+(k-j))<M && arr[i][j].equals(arr[i][k])
&& arr[i][j].equals(arr[i+(k-j)][j]) && arr[i][j].equals(arr[i+(k-j)][j+(k-j)])) {
if(max < (k-j+1)*(k-j+1))
max = (k-j+1)*(k-j+1);
}
}
}
}
System.out.println(max);
}
}
[출처]
https://www.acmicpc.net/problem/1051
'CODING > BAEKJOON' 카테고리의 다른 글
[BAEKJOON] 1120번 문자열 (0) | 2022.02.09 |
---|---|
[BAEKJOON] 11047번 동전 0 (0) | 2022.02.08 |
[BAEKJOON] 10610번 30 (0) | 2022.02.07 |
[BAEKJOON] 1475번 방 번호 (0) | 2022.02.06 |
[BAEKJOON] 1436번 영화감독 숌 (0) | 2022.02.05 |
댓글