본문 바로가기

PS

[BOJ] 1051번 - 숫자 정사각형

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

 

1051번: 숫자 정사각형

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

www.acmicpc.net

 

 

분류 : 완전 탐색

 

더보기
public class Main {

    public static PrintWriter out;

    public static void main(String[] args) throws IOException {
        MyScanner sc = new MyScanner();
        out = new PrintWriter(new BufferedOutputStream(System.out));

        int ans = 1;
        int N = sc.nextInt();
        int M = sc.nextInt();
        int min = Math.min(N, M);
        char[][] ch = new char[N][M];
        for (int index = 0; index < N; index++) {
            ch[index] = sc.nextLine().toCharArray();
        }
        for (int check = 1; check <= min; check++) {

            for (int y = 0; y < M; y++) {
                for (int x = 0; x< N; x++) {
                    if ((x + check < N) &&( y + check < M)) {
                        if ((ch[x][y] == ch[x + check][y]) && (ch[x][y] == ch[x][y + check])
                                && (ch[x][y] == ch[x + check][y + check])) {
                            ans = (check+1)*(check+1);
                        }
                    }
                }
            }
        }
        System.out.println(ans);
        out.flush();
    }
}

 

문제 풀이 : 변의 길이를 정하는 check 변수의 for문부터 시작해서 y좌표 -> x좌표를 이동시켜 가면서 사각형의 모든 꼭짓점에 해당하는 부분이 같은지 판별

=> 같다면 (check+1)이 한 변의 길이가 되므로 (check+1)^2 가 넓이가 된다.

 

'PS' 카테고리의 다른 글

[BOJ]1697번 - 숨바꼭질  (0) 2017.06.06
[BOJ] 2568번 : 전깃줄 - 2  (0) 2017.06.01
[BOJ] 2512번 - 예산  (0) 2017.05.29
[BOJ]2526번 : 싸이클  (0) 2017.05.01
[BOJ]1660번 : 캡틴 이다솜  (0) 2017.04.26