[BaekJoon] 백준 -번 문제이름
문제: https://www.acmicpc.net/problem/1915
내코드
- 점화식을 생각해내기 약간 까다로운 dp문제였다.
- 점화식은 다음과 같다.
- dp[i][j] = [i][j]칸을 정사각형의 가장 오른쪽 아래라고 했을 때 만들수 있는 가장 큰 정사각형의 한 변의 길이
- dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1
- 왜 위의 점화식이 성립하는지는 그림을 그려보면 쉽게 알 수 있다.
import java.io.*;
import java.util.StringTokenizer;
public class test {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int[][] arr = new int[n][m];
int[][] dp = new int[n][m];
// 초기화
int max = 0;
for (int i=0; i < n; i++) {
String[] s = br.readLine().split("");
for (int j = 0; j < m; j++) {
arr[i][j] = Integer.parseInt(s[j]);
if (arr[i][j] == 1) {
dp[i][j] = 1;
max = 1;
}
}
}
for (int i = 1; i < n; i++) {
for (int j = 1; j < m; j++) {
if (arr[i][j] == 1 && arr[i - 1][j - 1] == 1 && arr[i - 1][j] == 1 && arr[i][j - 1] == 1) {
dp[i][j] = Math.min(Math.min(dp[i - 1][j], dp[i][j - 1]), dp[i - 1][j - 1]) + 1;
max = Math.max(max, dp[i][j]);
}
}
}
bw.write(String.valueOf(max * max));
bw.flush();
bw.close();
br.close();
}
}
참고
728x90
반응형
'CS > Algorithm 문제' 카테고리의 다른 글
[BaekJoon] 백준 2668번 숫자고르기 (0) | 2021.09.10 |
---|---|
[BaekJoon] 백준 16234번 인구 이동 (0) | 2021.09.10 |
[BaekJoon] 백준 9084번 동전 (0) | 2021.08.20 |
[BaekJoon] 백준 11052 카드 구매하기 (0) | 2021.08.20 |
[BaekJoon] 백준 2011번 암호코드 (0) | 2021.08.18 |