Algorithm
[Algo] 백준 1051 숫자 정사각형 JAVA
조핑구
2024. 5. 8. 13:34
문제 바로가기 : https://www.acmicpc.net/problem/1051
메모리 : 14276KB
시간 : 128ms
언어 : Java 11
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int N, M;
static int[][] arr;
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 str = br.readLine();
for (int j = 0; j < M; j++) {
arr[i][j] = str.charAt(j) - '0';
}
}
int ans = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
// 정사각형인지 검사
ans = Math.max(ans, sqare(i, j));
}
}
if (ans == 0)
ans = 1;
System.out.println(ans);
}
private static int sqare(int i, int j) {
int max = 0;
for (int k = 1; k < N; k++) {
if (i + k < N && j + k < M) {
if (arr[i][j] == arr[i + k][j] && arr[i][j] == arr[i][j + k] && arr[i][j] == arr[i + k][j + k]) {
max = Math.max(max, (k + 1) * (k + 1));
}
}
}
return max;
}
}
풀이
모든 칸을 돌며 정사각형일때 네 귀퉁이의 숫자가 같은지 확인한다
private static int sqare(int i, int j) {
// arr[i][j]에서 시작한 정사각형 중최고값을 찾아야하기 때문에
int max = 0;
//1부터 N까지 정사각형을 만들어본다. 정사각형이기때문에 N과 M중에 하나만 고려하면 된다.
for (int k = 1; k < N; k++) {
//좌표가 범위 안에 있고
if (i + k < N && j + k < M) {
//네 귀퉁이의 숫자가 같으면
if (arr[i][j] == arr[i + k][j] && arr[i][j] == arr[i][j + k] && arr[i][j] == arr[i + k][j + k]) {
//최댓값을 갱신시켜본다.
max = Math.max(max, (k + 1) * (k + 1));
}
}
}
return max;
}