본문 바로가기
PS 문제 풀이/SWEA

[SWEA] 4062 Largest Empty Square

by 까망 하르방 2021. 3. 1.
반응형

출처: [SWEA] SW 문제해결 심화 - 동적 계획법

 Input 

1

4

0100

1001

1000

0101

 

 Output 

#1 2

▶ 동적계획법(Dynamic Programming, DP) 

 

동적계획법(Dynamic Programming, DP)

동적 계획법(Dynamic Programming)은 큰 의미에서 분할 정복과 같은 접근 방식을 의미한다. 처음 주어진 문제를 더 작은 문제들로 나눈 뒤 각 조각의 답을 계산하고, 이 답들로부터 원래 문제에 대한

zoosso.tistory.com

『0』과 『1』로 구성된 N×N행렬이 존재합니다.

『0』으로 된 가장 큰 정사각형의 한 변의 길이를 구하시오

- Test Cast 개수 T / 행렬의 크기 N

- 행렬 정보가 공백없이 주어집니다. 

 

자세한 풀이는 [BOJ] 1915 가장 큰 정사각형 참고하면 됩니다.

 

[BOJ] 백준 1915 가장 큰 정사각형

출처: https://www.acmicpc.net/problem/1915  Input 4 4 0100 0111 1110 0010  Output 4 ▶ DP[i][j] = (i,j)를 우측 끝으로 하는 정사각형의 최대 크기의 제곱근 DP[i][j]는 map[i][j] = 1인 지점에서 점화..

zoosso.tistory.com

단, 해당문제는 『0』과 『1』의 의미가 다르므로 입력받을 때 서로 바꿔줍니다.

또한, 정사각형의 크기가 아닌 한 변의 길이를 출력해야 합니다.

 


import java.io.IOException;
import java.util.Scanner;
 
public class Solution {
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
         
        int T = Integer.parseInt(sc.next());
        for (int tc = 1; tc <= T; tc++) {
             
            int N = Integer.parseInt(sc.next());
            int[][] map = new int[N+1][N+1];
            for(int i=1; i<=N; i++) {
                String str = sc.next();
                for(int j=1; j<=N; j++) {
                    map[i][j] = str.charAt(j-1) - '0';
                    if(map[i][j] == 0) map[i][j] = 1;
                    else map[i][j] = 0;
                }
            }
             
            int[][] DP = new int[N+1][N+1];
            int answer = 0;
            for(int i=1; i<=N; i++) {
                for(int j=1; j<=N; j++) {
                    if(map[i][j] == 1) {
                        DP[i][j] = min(DP[i-1][j], DP[i][j-1], DP[i-1][j-1]) + 1;                
                        answer = Math.max(answer, DP[i][j]);
                    }
                }
            }
             
            System.out.print("#" + tc + " ");
            System.out.println(answer);
        }
    }
     
    private static int min(int A, int B, int C) {
        return Math.min(Math.min(A, B), C);
    }
}

 

반응형

'PS 문제 풀이 > SWEA' 카테고리의 다른 글

[SWEA] 3820 롤러코스터  (0) 2021.03.01
[SWEA] 3814 평등주의  (0) 2021.03.01
[SWEA] 4070 타일링  (0) 2021.03.01
[SWEA] 4005 비밀  (0) 2021.03.01
[SWEA] 1868 파핑파핑 지뢰찾기  (0) 2021.03.01

댓글