백준

백준 1051 숫자 정사각형(Java)

Park DJ 2023. 1. 29. 11:31

https://www.acmicpc.net/problem/1051

 

1051번: 숫자 정사각형

N×M크기의 직사각형이 있다. 각 칸에는 한 자리 숫자가 적혀 있다. 이 직사각형에서 꼭짓점에 쓰여 있는 수가 모두 같은 가장 큰 정사각형을 찾는 프로그램을 작성하시오. 이때, 정사각형은 행

www.acmicpc.net


 

해석 및 팁

 


 

이 문제는 반복문을 통해 한 점을 기준으로 같은 길이만큼 늘려가면서 같은 값이 있는지를 찾아내면 됩니다. 주의할 점은 기준점과 길이의 합이 직사각형의 크기를 벗어나면 안 된다는 점입니다.

 


 

Java 코드

 


import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    StringBuilder sb = new StringBuilder();

    int max = -1;
    int n = sc.nextInt();
    int m = sc.nextInt();
    int len = Math.min(n, m);
    int[][] arr = new int[n][m];

    for(int i = 0; i < n; i++) {
      String str = sc.next();
      for(int j = 0; j < m; j++) arr[i][j] = str.charAt(j) - '0';
    }

    for(int i = 0; i < n; i++) {
      for(int j = 0; j < m; j++) {
        for(int k = 1; k <= len; k++) {
          if(i + k <= n && j + k <= m && arr[i][j] == arr[i+k-1][j]
          && arr[i+k-1][j] == arr[i][j+k-1] && arr[i][j] == arr[i+k-1][j+k-1]) {
            max = Math.max(k, max);
          }
        }
      }
    }
    
    System.out.println(max * max);
  }
}