<Algorithm> 215. 가장 큰 정사각형 찾기(Programmers)
by BFine반응형
1. 가장 큰 정사각형 찾기(Programmers)
사용 알고리즘 : DP
-
예전에 기업 코딩 테스트볼때 이것보다 어렵지만 비슷한 유형의 문제를 본적있다. (그때는 못풀었다...)
코드를 보면 간단하지만 DP에 대한 접근방식을 모르면 상당히 어려울 수 있는 문제라 생각이 든다.
문제에 대한 접근&생각
- 최대 넒이를 가지는 정사각형의 크기 -> n과 m은 최대 1000 -> 너무 많은 경우의 수 발생 -> DP!
- 임의의 한점을 선택 -> 그 점을 오른쪽 아래로 가진다면? -> 인접한 왼쪽, 위쪽, 대각선 지점에서의 최대치의 최소값으로 알 수 있음
- 아래 그림에서 셋중에서 가장 작은 (회색영역 + 1) * (회색영역 + 1)로 크기가 정해지는 것을 알수 있음
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | public class Solution { public int solution(int[][] board){ int n = board.length; int m = board[0].length; int[][] dp = new int[n+1][m+1]; int max = 0; /*************************** * DP를 활용하여 임의의 점을 기준으로 * 왼쪽,위쪽,대각선 방향으로 가능한 * 정사각형의 최대값을 저장한다. ***************************/ for(int i = 1; i < n+1; i++) { for(int j = 1; j < m+1; j++) { if(board[i-1][j-1] == 1) { dp[i][j] = Math.min(dp[i-1][j], Math.min(dp[i][j-1], dp[i-1][j-1]))+1; // +1은 해당 지점의 크기를 가리킨다. max = Math.max(dp[i][j], max); } } } return max*max; } } | cs |
참고 & 출처
반응형
'공부(2018~2019) - 스킨변경전 > Algorithm' 카테고리의 다른 글
<Algorithm> 216. 땅따먹기(Programmers) (0) | 2019.06.05 |
---|---|
<Algorithm> 214. 줄어들지않아(BOJ) (0) | 2019.06.05 |
<Algorithm> 213. 조짜기(BOJ) (0) | 2019.06.01 |
<Algorithm> 212. 제곱수의 합(BOJ) (0) | 2019.05.31 |
<Algorithm> 211. 동전(BOJ) (0) | 2019.05.31 |
블로그의 정보
57개월 BackEnd
BFine