1. 문제 링크
2. 문제 및 입출력예제
3. 문제 풀이
정사각형의 꼭짓점 숫자 중 가장 큰 정사각형을 찾는 문제이다.
N과 M 중 작은 값부터 정사각형을 만들수 있어서 이중포문을 정사각형 크기만큼씩 돈다.
네 꼭짓점이 모두 같으면 true를 리턴해서 라벨이 있는 out에서 나간다.
정사각형 크기를 줄이면서 도는데 크기가 0이 되면 종료한다.
4. 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
static int map[][], N, M;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String[] split = br.readLine().split(" ");
N = Integer.parseInt(split[0]);
M = Integer.parseInt(split[1]);
map = new int[N][M];
for(int i=0;i<N;i++) {
map[i] = Arrays.stream(br.readLine().split("")).mapToInt(Integer::parseInt).toArray();
}
//정사각형의 꼭짓점에 쓰여 있는 숫자가 모두 같은 가장 큰 정사각형 찾기
int size = Math.min(N, M);
out:
while(true) {
for(int i=0;i<N-size;i++) {
for(int j=0;j<M-size;j++) {
if(check(i, j, size)) {
break out;
}
}
}
size--;
if(size == 0) {
break;
}
}
if(size == 0) {
System.out.println(1);
}
else {
size++;
System.out.println(size*size);
}
}
private static boolean check(int i, int j, int size) {
if(map[i][j] == map[i+size][j]
&& map[i][j+size] == map[i+size][j+size]
&& map[i][j] == map[i][j+size]){
return true;
}
return false;
}
}
'ALGORITHM' 카테고리의 다른 글
백준 9328 열쇠 (Java) (0) | 2023.04.11 |
---|---|
백준 1743 음식물 피하기 (Java) (0) | 2023.04.11 |
백준 10282 해킹 (Java) (0) | 2023.04.09 |
백준 1913 달팽이 (Java) (0) | 2023.04.08 |
백준 9012 괄호 (Java) (0) | 2023.04.07 |