알고리즘 공부/백준

[백준] 1051번 숫자 정사각형

pa_songsong 2021. 11. 4. 18:39

출처

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