728x90
❓ 숫자 정사각형
🏷️ 관련 주제 : 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