import java.util.*;
class Solution
{
public int solution(int [][]board)
{
int answer = 0;
//초기값 상정을 위한 row, col 변수 설정
int row = board.length;
int col = board[0].length;
//초기값 : 만약 행, 열의 길이가 1일 경우, 1리턴
if(row < 2 || col < 2) return 1;
//최솟값 미리 선언
int min = 0;
//초기값이 아닌 경우의 DP 로직
for(int i=1; i<row; i++)
{
for(int j=1; j<col; j++)
{
//만약 현재 위치의 값이 1이 아닐경우
if(board[i][j]==1)
{
//왼쪽상단(↖︎), 위쪽(↑), 왼쪽(←) 중 최솟값
//JAVA에서 Min 함수는 두개씩밖에 비교불가 - 안에 다시 사용했음
min = Math.min(board[i-1][j], Math.min(board[i][j-1], board[i-1][j-1]));
//자신의 값에 그 최솟값+1
board[i][j] = min+1;
}
//할당된 값들 중 최댓값을 answer에 할당
if(answer < board[i][j]) answer=board[i][j];
}
}
return answer*answer;
}
}
※ 참고자료
https://onlydev.tistory.com/65
[프로그래머스] 가장 큰 정사각형 찾기 | JavaScript
가장 큰 정사각형 찾기 문제 설명 1과 0으로 채워진 표(board)가 있습니다. 표 1칸은 1 x 1의 정사각형으로 이루어져 있습니다. 표에서 1로 이루어진 가장 큰 정사각형을 찾아 넓이를 return하는 solution
onlydev.tistory.com
https://hongjw1938.tistory.com/47
알고리즘 - Dynamic Programming(동적 계획법)
1. 개요 DP, 즉 다이나믹 프로그래밍(또는 동적 계획법)은 기본적인 아이디어로 하나의 큰 문제를 여러 개의 작은 문제로 나누어서 그 결과를 저장하여 다시 큰 문제를 해결할 때 사용하는 것으
hongjw1938.tistory.com
'프로그래밍 > Algorithm' 카테고리의 다른 글
2022년 05월 14일 프로그래머스 - 땅따먹기(다이나믹 프로그래밍, DP) (0) | 2022.05.14 |
---|---|
2022년 05월 12일 프로그래머스 - 나머지 한 점 (0) | 2022.05.12 |
2022년 05월 11일 프로그래머스 - 순열 검사 (0) | 2022.05.11 |
2022년 05월 10일 프로그래머스 - 자릿수 더하기 (0) | 2022.05.10 |
댓글