728x90
반응형
문제 링크
programmers.co.kr/learn/courses/30/lessons/12905
* Programmers - level 2 - (자바)가장 큰 정사각형 찾기 - DP
* 처음에는 for문을 이용해서 전체 순회해서 가장 큰 정사각형을 찾는 방식으로 하려고 했다.
* 하지만.. 보통일이 아니었고, 효율성이 정말이지 바닥을 쳤다.
* 결국 찾아보니 세상에나 이 문제는 DP 문제였던 것이다!!!
< logic >
1. 기준점에서 왼쪽 / 위쪽 / 왼쪽 대각선 위 의 현재 숫자를 본다
2. 0이 아니라면 3방향 중 최소인 숫자 + 1을 하고 저장해준다.
3. 저장 한 숫자가 가장 큰 정사각형의 한 변의 크기가 된다!
갱신과 동시에 최대인 값도 갱신한다.
모든 과정이 끝나고 나온 최대값이 정답!
class Solution
{
public int solution(int [][]board)
{
int answer = 0;
int height = board.length; // 세로길이
int width = board[0].length; // 가로길이
int[][] map = new int[height + 1][width + 1]; // 원본에 0 패딩할 배열
// 배열 복사
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
map[i + 1][j + 1] = board[i][j];
}
}
for (int i = 1; i <= height; i++) {
for (int j = 1; j <= width; j++) {
if (map[i][j] != 0) { // 0이 아닌 경우에 한해서, 최소를 찾는다
map[i][j] = Math.min(Math.min(map[i - 1][j], map[i][j - 1]), map[i - 1][j - 1]) + 1;
answer = Math.max(answer, map[i][j]); // 최대값 갱신
}
}
}
return answer * answer;
}
}
반응형
'문제풀이 > Programmers 문제풀이' 카테고리의 다른 글
[ 알고리즘 ] 코딩 - Programmers - 불량 사용자.java (0) | 2020.12.22 |
---|---|
[ 알고리즘 ] 코딩 - Programmers - 예상대진표.java (0) | 2020.12.18 |
[ 알고리즘 ] 코딩 - Programmers - 단속카메라.java (0) | 2020.12.16 |
[ 알고리즘 ] 코딩 - Programmers - 가장 큰 수.java (0) | 2020.12.16 |
[ 알고리즘 ] 코딩 - Programmers - 구명보트.Java (0) | 2020.12.15 |