본문 바로가기
Algorithm/Baekjoon

Baekjoon 1051 숫자 정사각형 JAVA

by Hunveloper 2022. 5. 4.
728x90
 

1051번: 숫자 정사각형

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

www.acmicpc.net

문제

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

입력

첫째 줄에 N과 M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 수가 주어진다.

출력

첫째 줄에 정답 정사각형의 크기를 출력한다.

풀이

코드 참조

코드
import java.io.*;
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 n= Integer.parseInt(st.nextToken()), m=Integer.parseInt(st.nextToken()), ans=1;
		char [][] arr = new char [n][m];
		for(int i=0;i<n;i++)
			arr[i]=br.readLine().toCharArray();
		// 이중 for문으로 전체탐색
		for(int i=0;i<n;i++)
			for(int j=0;j<m;j++)
				// 이 부분부터 동일한 넓이로 정사각형을 만들어가며 각 꼭지점이 동일한지 판단 
				for(int k=1;i+k<n&&j+k<m;k++) {	// for문 조건문에 i+k가 n보다 작고 j+k가 m보다 작아 입력받은 배열을 벗어나지 못하도록 한다
					// 왼쪽 상단의 꼭지점이랑 다른 꼭지점을 비교하여 모두가 동일하다면 꼭지점으로 이루어진 정사각형이다
					if(arr[i][j]==arr[i+k][j] && arr[i][j]==arr[i][j+k] && arr[i][j]==arr[i+k][j+k])
						ans=Math.max(ans, (k+1)*(k+1));
				}
		System.out.println(ans);
	}
}

 

728x90
728x90

'Algorithm > Baekjoon' 카테고리의 다른 글

Baekjoon 21335 Another Eruption JAVA  (0) 2022.05.05
Baekjoon 20352 Circus JAVA  (0) 2022.05.05
Baekjoon 20353 Atrium JAVA  (0) 2022.05.04
Baekjoon 8723 Patyki JAVA  (0) 2022.05.04
Baekjoon 16600 Contemporary Art JAVA  (0) 2022.05.04

댓글