본문 바로가기
JAVA/백준

[Java] 백준 1915 가장 큰 정사각형 - 동적 계획법(9)

by 푸_푸 2023. 1. 16.
728x90

백준 1915 가장 큰 정사각형
문제

n×m의 0, 1로 된 배열이 있다. 이 배열에서 1로 된 가장 큰 정사각형의 크기를 구하는 프로그램을 작성하시오.

0 1 0 0
0 1 1 1
1 1 1 0
0 0 1 0

위와 같은 예제에서는 가운데의 2×2 배열이 가장 큰 정사각형이다. 

입력

첫째 줄에 n, m(1 ≤ n, m ≤ 1,000)이 주어진다. 다음 n개의 줄에는 m개의 숫자로 배열이 주어진다.

출력

첫째 줄에 가장 큰 정사각형의 넓이를 출력한다.


제출

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		long[][] D = new long[1001][1001];
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int m = sc.nextInt();
		long max = 0;
		for (int i = 0; i < n; i++) {
			String mline = sc.next();
			for (int j = 0; j < m; j++) {
				D[i][j] = Long.parseLong(String.valueOf(mline.charAt(j)));
				if (D[i][j] == 1 && j > 0 && i > 0) {
					D[i][j] = Math.min(D[i - 1][j - 1], Math.min(D[i - 1][j],  D[i][j - 1])) + D[i][j];
				}
				if (max < D[i][j]) {
					max = D[i][j];
				}
			}
		}
		System.out.println(max * max);
	}
}

예제

4 4
0100
0111
1110
0010

결과

백준 1915 가장 큰 정사각형

 

 

1915번: 가장 큰 정사각형

첫째 줄에 n, m(1 ≤ n, m ≤ 1,000)이 주어진다. 다음 n개의 줄에는 m개의 숫자로 배열이 주어진다.

www.acmicpc.net

 

728x90

댓글