상세 컨텐츠

본문 제목

1051. 숫자 정사각형

Algorithm

by aeongiii 2025. 2. 21. 11:08

본문

1. 문제 분석
    1) N*M 직사각형에서 가장 큰 정사각형을 찾아 크기를 출력한다.

2. 제약 조건
    1) 1 <= N, M <= 50

3. 최초 의사결정
    1) N과 M을 받고, N만큼 for문 돌려서 이중 배열에 받는다.
    2) 이중 for문을 만들어 모든 수를 돌면서,
    각 수에 대해 오른쪽/아래쪽 범위를 초과하지 않는 선에서 정사각형 꼭짓점을 찾는다.
    - 네 꼭짓점이 모두 같으면 크기를 구해서 저장한다.
    - 큰 정사각형을 발견할때마다 크기를 계속 최신화한다.
    3) 모두 돌고 나면 크기 출력. 기본 크기는 1

4. 문제풀면서 수정한 부분
    1) N과 M의 길이가 다르므로, 정사각형을 찾을 때 더 짧은 길이의 범위 안에서 돌아야 한다.

import java.io.*;
 import java.util.*;

 public class App {
    public static void main(String[] args) throws 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+1];  // { , 42101, 22100, 22101}

        for(int i = 1; i < N+1; i++) {
            arr[i] = br.readLine();
        }

        // 크기 저장
        int size = 1;

        // 브루트포스
        for (int i = 1; i < N+1; i++) { // 세로
            for (int j = 0; j < M; j++) { // 가로
                // 출발점
                char start = arr[i].charAt(j);
               
                // 정사각형 변만큼 이동할 길이 (범위 : 1부터 M까지)
                int shortLine = Math.min(M-j, N-i+1);
                for (int k = 1; k < shortLine; k++) {
                    char right = arr[i].charAt(j+k); // j위치에서부터 k만큼 이동
                    char down = arr[i+k].charAt(j);
                    char diagonal = arr[i+k].charAt(j+k);

                    if (start == right && right == down && down == diagonal) {
                        int newSize = (k+1)*(k+1); // k만큼 이동했다면 한 변의 길이는 k+1
                        if(size < newSize) size = newSize; // 갱신
                    }
                }
            }
        }

        System.out.println(size);
    }
 }

 

'Algorithm' 카테고리의 다른 글

25178. 두라무리 휴지  (0) 2025.02.23
10610. 30  (0) 2025.02.22
1149. RGB거리  (0) 2025.02.18
10814. 나이순 정렬  (0) 2025.02.17
2630. 색종이 만들기  (0) 2025.02.13

관련글 더보기