백준 숫자 정사각형

KIMYEONGJUN·2024년 11월 25일
0
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

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

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

내가 이 문제를 보고 생각해본 부분

BufferedReader와 StringTokenizer를 사용하여 입력을 받는다.
첫 줄에서 N과 M을 읽고, 다음 N줄에서 숫자로 구성된 직사각형을 입력받는다.
grid 배열에 직사각형의 각 요소를 저장한다.
maxSize 변수를 초기화하여 최대 정사각형 크기를 저장할 준비를 한다.
두 개의 중첩된 루프를 사용하여 각 칸을 정사각형의 꼭짓점으로 설정하고 가능한 최대 크기를 탐색한다.
각 정사각형의 네 꼭짓점이 같은지 확인하고, 만약 같다면 maxSize를 갱신한다.
모든 탐색이 끝난 후, maxSize의 제곱을 출력하여 가장 큰 정사각형의 넓이를 출력한다.

코드로 구현

package baekjoon.baekjoon_24;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

// 백준 1051번 문제
public class Main849 {
    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());

        char[][] grid = new char[N][M];
        for(int i = 0; i < N; i++) {
            grid[i] = br.readLine().toCharArray();
        }

        int maxSize = 1; // 최소 정사각형 크기는 1

        // 모든 좌표를 정사각형의 꼭짓점으로 설정하고 가능한 최대 크기를 검사
        for(int i = 0; i < N; i++) {
            for(int j = 0; j < M; j++) {
                // 현재 위치를 꼭짓점으로 하는 정사각형의 최대 크기 탐색
                for(int size = 1; i + size - 1 < N && j + size - 1 < M; size++) {
                    // 꼭짓점이 같은지 확인
                    char topLeft = grid[i][j];
                    char topRight = grid[i][j + size - 1];
                    char bottomLeft = grid[i + size - 1][j];
                    char bottomRight = grid[i + size - 1][j + size - 1];

                    if(topLeft == topRight && topLeft == bottomLeft && topLeft == bottomRight) {
                        maxSize = Math.max(maxSize, size);
                    }
                }
            }
        }

        System.out.println(maxSize * maxSize); // 정사각형의 크기 출력 (넓이)
        br.close();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글