본문 바로가기
CODING/BAEKJOON

[BAEKJOON] 1051번 숫자 정사각형

by snow_white 2022. 2. 8.


간단하게 생각해보면 이중 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

 

1051번: 숫자 정사각형

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

www.acmicpc.net

 

'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

댓글