https://www.acmicpc.net/problem/1051
νλ¦°μ½λ
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int N = scan.nextInt();
int M = scan.nextInt();
int[][] arr = new int[N][M];
int max = 0;
int row = 0;
int col = 0;
boolean flag = true;
// 2μ°¨μ λ°°μ΄μ κ° λ£κΈ°
for(int i=0; i<N; i++) {
String str = scan.next();
for(int j=0; j<M; j++) {
arr[i][j] = str.charAt(j) - '0';
}
}
/*
* 1x1 , 2x2 , 3x3 , ... κ°λ₯ν λͺ¨λ μ μ¬κ°νμ μμ νμμΌλ‘ μ°Ύλλ€.
*/
while(true) {
int area = 0;
if(!flag)
break;
for(int i=0; i<N-1; i++) {
for(int j=0; j<M-1; j++) {
// λΉκ΅ν μ μλ κ°λ‘ λλ μΈλ‘μ κΌμ§μ μ΄ λ°°μ΄μ ν¬κΈ°λ₯Ό λ²μ΄λ κ²½μ°
if(row + i >=N || col + j >= M) {
flag = false;
break;
}
/*
* λ€ κ°μ κΌμ§μ μ΄ μ μ¬κ°νμ μ΄λ£¨κ³ κΌμ§μ μ μ°μ¬μλ μκ° κ°μ λ,
* A B
* C D
* μ 4κ°μμ, A = B && A = C && A = D μ΄λ©΄ 4κ°μ μκ° κ°λ€κ³ νλ¨.
*/
if(arr[i][j] == arr[i][j+col] && arr[i][j] == arr[i+row][j] && arr[i][j] == arr[i+row][j+col]) {
// νλ³μ κΈΈμ΄ = λ μ μ μ’νλ₯Ό λΊ ν +1μν¨, (0,2) (0,4)μ κΈΈμ΄ => 3
int width = (Math.abs(j-i)) + 1;
area = width * width;
}
}
}
max = Math.max(max, area);
row ++;
col ++;
}
System.out.println(max);
scan.close();
}
}
νμ΄
μ²μ λ¬Έμ μμ N, Mμ λ²μκ° 50κΉμ§λ°μ μλμ μμ νμμΌλ‘ ν΄λ μΆ©λΆν μκ°μ΄κ³Όκ° λ κ² κ°μ§ μμμ
μ μ¬κ°νμ΄ 1x1λΆν° μμν΄μ κ°μ₯ ν° μ μ¬κ°ν nxn κΉμ§ λΉκ΅ν΄κ°λ©° 4κ°μ κΌμ§μ μ΄ κ°μμλ₯Ό μ°Ύκ³ , κ°μ₯ ν° λμ΄λ₯Ό ꡬνλλ‘ μκ°νκ³ μ½λλ₯Ό μμ±νλλ°, μ μ½λλ ν μ€νΈμΌμ΄μ€λ§ ν΅κ³Όνκ³ νλ Έλ€κ³ λμ¨λ€.
λμ ν λ μ€λ₯΄μ§κ° μμμ ν λΈλ‘κ·Έλ€μ μ°Έκ³ νλ€.
μ΅μ’ μ½λ
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int N = scan.nextInt();
int M = scan.nextInt();
int[][] arr = new int[N][M];
final int MIN = Math.min(N, M);
int area = 0;
int maxArea = 0;
// 2μ°¨μ λ°°μ΄μ κ° λ£κΈ°
for(int i=0; i<N; i++) {
String str = scan.next();
for(int j=0; j<M; j++) {
arr[i][j] = str.charAt(j) - '0';
}
}
for(int i=0; i<N; i++) {
for(int j=0; j<M; j++) {
for(int k=0; k<MIN; k++) {
if(i+k < N && j+k < M) { // λ°°μ΄ λ²μ μ΄λ΄
// 4κ°μ κΌμ§μ μ΄ μ μ¬κ°νμ΄ λλ 쑰건
if(arr[i][j] == arr[i][j+k] && arr[i][j] == arr[i+k][j] && arr[i][j] == arr[i+k][j+k]) {
area = (k+1) * (k+1);
maxArea = Math.max(maxArea, area);
}
}
}
}
}
System.out.println(maxArea);
scan.close();
}
}
νμ΄
λ¨Όμ μ£Όμ΄μ§ N, M μ€ λ ν°κ°μ μ°Ύλλ€.
λ¬Έμ μμ 3 x 5λ‘ μ£Όμ΄μ§ κ²½μ°, μ΅λλ‘ κ°λ₯ν μ μ¬κ°νμ 3 x 3μ΄λ―λ‘, λ μμ 3κΉμ§λ§ λ°λ³΅νλ©΄ λκΈ° λλ¬Έμ΄λ€.
area = 4κ°μ κΌμ§μ μ΄ μ μ¬κ°νμΌλ, λμ΄λ₯Ό ꡬνλ λ³μκ³
maxArea = μ areaμ λΉκ΅ν΄μ λ ν°κ°μ μ μ₯νκ³ , μ΅μ’ μ μΌλ‘ μΆλ ₯ν λ³μλ€.
i+k μ j+kκ° κ°κ° M, N λ³΄λ€ μμμΌ λ°°μ΄μ λ²μ μ΄λ΄λΌκ³ ν μ μλ€.
4κ°μ κΌμ§μ μ΄ κ°μ 쑰건μ 3κ°μ κΌμ§μ λ§ νμΈν΄μ£Όλ©΄ λλ€.
(0,0) , (0,1)
(1,0) , (1,1)
μμ κ°μ΄ 4κ°μ μ μ΄ μμλ, A = B && A = C && A = D μ΄λ©΄ μλμ μΌλ‘ B = C = D κ° λ³΄μ₯λκΈ° λλ¬Έμ΄λ€.
λν 4κ°μ μ μ μ°ΎκΈ° μν΄ μΈλ±μ€λ₯Ό μ‘°μν΄μΌνλλ°, νκ³Ό μ΄, νμ΄μ κ°κ° kλ₯Ό λνλ©΄ μΌμ ν 4κ°μ κΌμ§μ μ΄ λλ€.
* λκ° μκ°λ³΅μ‘λμ λν΄ μ½κ°(?)μ κ°μ΄ μ‘νλ κ² κ°λ€.
μ λ¬Έμ μ κ²½μ°λ O(n^3) μ΄μ§λ§, κ°κ°μ λ²μλ 50μ΄λ―λ‘ 50^3 μΌλ‘ μΆ©λΆν μκ°μΈ κ² κ°λ€.
λ³΄ν΅ 1μ΄λΉ λ°λ³΅λ¬Έ μν νμκ° 1μ΅μ λμ΄κ°λ©΄ μκ° μ νμ μ΄κ³Όν κ°λ₯μ±μ΄ μλ€κ³ νλ€.
'Algorithm' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
νλ‘κ·Έλλ¨Έμ€[Java] - Kλ²μ§Έμ(μ λ ¬) (0) | 2020.03.04 |
---|---|
[Codeforces] 703A: Mishka and Game (0) | 2020.03.04 |
[λ°±μ€] 4948λ²: λ² λ₯΄νΈλ 곡μ€(μμ, μλΌν μ€ν λ€μ€μ 체) (0) | 2020.03.03 |
νλ‘κ·Έλλ¨Έμ€[Java] - λ©λ¦¬ λ°κΈ°(DP) (0) | 2020.03.03 |
νλ‘κ·Έλλ¨Έμ€[Java] - μΌκ·Ό μ§μ (0) | 2020.03.03 |
λκΈ