출처
https://www.acmicpc.net/problem/1051
1051번: 숫자 정사각형
N×M크기의 직사각형이 있다. 각 칸에는 한 자리 숫자가 적혀 있다. 이 직사각형에서 꼭짓점에 쓰여 있는 수가 모두 같은 가장 큰 정사각형을 찾는 프로그램을 작성하시오. 이때, 정사각형은 행
www.acmicpc.net
문제
N×M크기의 직사각형이 있다. 각 칸에는 한 자리 숫자가 적혀 있다. 이 직사각형에서 꼭짓점에 쓰여 있는 수가 모두 같은 가장 큰 정사각형을 찾는 프로그램을 작성하시오. 이때, 정사각형은 행 또는 열에 평행해야 한다.
입력
첫째 줄에 N과 M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 수가 주어진다.
출력
첫째 줄에 정답 정사각형의 크기를 출력한다.
예제

내코드
sqare_size에 가장 큰 정사각형을 min으로 비교해서 저장합니다.
sqare_size가 0이 되지 않을 때까지 while문을 돌면서
제한을 둔 for문 내에서 꼭짓점을 체크합니다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine()," ");
int R = Integer.parseInt(st.nextToken());
int C = Integer.parseInt(st.nextToken());
int mat[][] = new int[R][C];
for(int i = 0; i<R; i++){
String s = br.readLine();
String ss[] = s.split("");
for(int j = 0; j<C; j++){
mat[i][j] = Integer.parseInt(ss[j].toString());
}
}
//가장 큰 정사각형 저장
int square_size = Math.min(R,C);
while(square_size != 0){
for(int i = 0; i<=R-square_size; i++){
for(int j = 0; j<=C-square_size; j++){
//각 꼭짓점 체크
if(mat[i][j] == mat[i][j+square_size-1] && mat[i+square_size-1][j]==mat[i][j]
&& mat[i+square_size-1][j]==mat[i+square_size-1][j+square_size-1]){
//넓이 출력
System.out.println(square_size*square_size);
return;
}
}
}
square_size--;
}
}
}'알고리즘 공부 > 백준' 카테고리의 다른 글
| [백준] 1463번 1로 만들기 (0) | 2021.11.10 |
|---|---|
| [백준] 4949번 균형잡힌 세상 (0) | 2021.11.07 |
| [백준] 1094번 막대기 (0) | 2021.11.04 |
| [백준] 1049번 기타줄 (0) | 2021.11.03 |
| [백준] 11724번 연결요소의 개수 (0) | 2021.11.02 |