[백준 / Java] 1051번: 숫자 정사각형 (브루트포스 알고리즘)

2025. 2. 4. 15:14·CS & Algorithm

 

코테99 11일차 문제는 백준 1051번 '숫자 정사각형'이다.

 

 

이번 문제도 완전 탐색 (브루트포스) 알고리즘을 활용하는 문제였다.

 

 

접근 방법

  1. 꼭짓점에에 쓰여 있는 수가 모두 같은 가장 큰 정사각형을 찾는다.
  2. 정사각형은 행 또는 열에 평행해야 한다.


알고리즘 진행 순서

  1. 입력된 값을 배열에 넣는다.
  2. 전체(N*M)를 도는데, 가능한 최대 정사각형 크기 안에서 반복하여 최대 정사각형을 구한다.
  3. 최대 정사각형을 출력한다.


구현 코드

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

public class Main {
    static int[][] arr;
    static int N, M = 0;
    // 최소 정사각형 크기 => 이후 최대값을 넣을 것.
    static int maxSize = 1;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());
        arr = new int[N][M];

        for (int i = 0; i < N; i++) {
            String line = br.readLine();
            for (int j = 0; j < M; j++) {
                arr[i][j] = line.charAt(j) - '0';
            }
        }


        for (int i = 0; i < N; i++) {
            for (int j = 0; j < M; j++) {
                // 가능한 최대 정사각형 크기
                int maxLength = Math.min(N - i, M - j);

                for (int k = 1; k < maxLength; k++) { // k는 현재 변의 길이, 점점 늘리면서 다 살펴보기
                    if (arr[i][j] == arr[i + k][j] && arr[i][j] == arr[i][j + k] && arr[i][j] == arr[i + k][j + k]) {
                        maxSize = Math.max(maxSize, (k + 1) * (k + 1)); // 최대 값을 집어 넣기
                    }
                }
            }
        }
        System.out.println(maxSize);

    }

}

 


회고

  1. 처음에 브루트포스 구현에 익숙하지 않아서 단순히 생각하지 않고 한 줄에서 중복을 찾고 거리와 값을 저장하려고 했다.
  2. 최소 정사각형 크기와 최대 정사각형 크기를 기준으로 하는 것을 생각하지 못했다. 연습이 많이 필요할 것 같다.

'CS & Algorithm' 카테고리의 다른 글

[백준 / Java] 2615번: 오목 (브루트포스)  (1) 2025.02.06
[백준 / Java] 2529번: 부등호 (브루트포스 + 백트래킹)  (0) 2025.02.05
[백준 / Java] 1018번: 체스판 다시 칠하기 (브루트포스 알고리즘)  (0) 2025.02.04
[99클럽 코테 스터디] 10일차 TIL - 백준 2573번 빙산(자바 Java)  (0) 2025.01.24
[99클럽 코테 스터디] 8일차 TIL - 백준 2667번 단지 번호 붙이기(자바 Java)  (0) 2025.01.23
'CS & Algorithm' 카테고리의 다른 글
  • [백준 / Java] 2615번: 오목 (브루트포스)
  • [백준 / Java] 2529번: 부등호 (브루트포스 + 백트래킹)
  • [백준 / Java] 1018번: 체스판 다시 칠하기 (브루트포스 알고리즘)
  • [99클럽 코테 스터디] 10일차 TIL - 백준 2573번 빙산(자바 Java)
whatdoyumin
whatdoyumin
안녕하세요, 꾸준히 성장하는 개발자..... 입니다
  • whatdoyumin
    whatdoyumin 님의 블로그
    whatdoyumin
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Frontend
      • Backend
      • Study & Course
      • CS & Algorithm
      • DevOps & Infra
      • Certification
      • Database
      • Project
      • atc.
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    zustand
    백준 #백준2805번 #나무자르기 #이분탐색 #알고리즘
    TypeScript
    백엔드
    github자동리뷰
    99클럽 #코딩테스트준비 #개발자취업 #항해99 #til#dp#동적계획법#코테#백준
    99클럽 #코딩테스트준비 #개발자취업 #항해99 #til #알고리즘 #브루트포스 #백준 #오목 #완전탐색 #코딩테스트
    frontend
    전역상태관리
    클라우드
    탐색알고리즘
    99클럽 #코딩테스트준비 #개발자취업 #항해99 #til
    개발자팁
    devops
    ai코드리뷰
    타입스크립트
    결제로직
    백트래킹
    AWS자격증
    완전탐색
    ResponseEntity
    Pruning
    자바스크립트 코테
    Saa
    githubworkflow
    coderabbit
    Spring
    코드리뷰자동화
    브루트포스
    코드래빗
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
whatdoyumin
[백준 / Java] 1051번: 숫자 정사각형 (브루트포스 알고리즘)
상단으로

티스토리툴바