본문 바로가기
Language/Java

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

by ㅇ달빛천사ㅇ 2025. 2. 5.
728x90
1051번 / 숫자 정사각형

숫자 정사각형

🏷️ 관련 주제 : DFS



💦 나의 시도

DFS로 문제를 해결해 보려고 했는데
1%에서 바로 틀림.
좀 더 고민해 보아야겠다.

제출했던 코드

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

public class Main {
    public static int[][] rec;
    public static int N;
    public static int M;
    public static int Largest;
    public static int maxSize;

    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());
        Largest = Math.min(N, M);
        Largest *= Largest;
        maxSize = 1;
        rec = new int[N][M];

        for (int i = 0; i < N; i++) {
            String row = br.readLine();

            for (int j = 0; j < M; j++) {
                rec[i][j] = row.charAt(j) - '0';
            }
        }

        for (int i = 0; i < N - 1 && maxSize < Largest; i++) {
            for (int j = 0; j < M - 1 && maxSize < Largest; j++) {
                int[] p1 = {i, j};
                int[] p2 = {p1[0], -1};
                int[] p3 = {-1, p1[1]};
                int[] p4 = {-1, -1};

                getSquareSize(p1, p2, p3, p4, rec[p1[0]][p1[1]]);
            }
        }

        System.out.println(maxSize);
    }

    public static void getSquareSize(int[] p1, int[]p2, int[] p3, int[] p4, int value) {
        if (p2[1] == -1) {
            for (int i = p1[1] + 1; i < M && maxSize < Largest; i++) {
                if (rec[p1[0]][i] == value) {
                    int[] nextP2 = {p1[0], i};
                    int[] nextP4 = {-1, i};
                    getSquareSize(p1, nextP2, p3, nextP4, value);
                }
            }

            return;
        }

        if (p3[0] == -1) {
            for (int i = p1[0] + 1; i < N && maxSize < Largest; i++) {
                if (rec[i][p1[1]] == value) {
                    int[] nextP3 = {i, p1[1]};
                    int[] nextP4 = {i, p2[1]};
                    getSquareSize(p1, p2, nextP3, nextP4, value);
                }
            }

            return;
        }

        if (rec[p4[0]][p4[1]] == value) {
            int len = Math.max(p4[0] - p1[0], p4[1] - p4[1]) + 1;
            int size1 = len * len;
            if (size1 > maxSize) {
                maxSize = size1;
            }
        }
    }
}


📑제출 기록 및 오답 원인


💯 해결 방법

(미완료)

 

728x90


Top