반응형
출처: [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 |
댓글