728x90
반응형
programmers.co.kr/learn/courses/18
알고리즘 문제 해설
프로그래머스의 모의테스트는 프로그래머스의 시스템에 익숙해지기 위한 테스트이며, 문제 자체는 2018 1ST KAKAO BLIND RECRUITMENT와 전혀 관계없습니다. 다만 모의테스트의 풀이에 대한 요청이 있어
programmers.co.kr
문제 설명
1와 0로 채워진 표(board)가 있습니다. 표 1칸은 1 x 1 의 정사각형으로 이루어져 있습니다. 표에서 1로 이루어진 가장 큰 정사각형을 찾아 넓이를 return 하는 solution 함수를 완성해 주세요. (단, 정사각형이란 축에 평행한 정사각형을 말합니다.)
예를 들어
1 | 2 | 3 | 4 |
0 | 1 | 1 | 1 |
1 | 1 | 1 | 1 |
1 | 1 | 1 | 1 |
0 | 0 | 1 | 0 |
가 있다면 가장 큰 정사각형은
1 | 2 | 3 | 4 |
0 | 1 | 1 | 1 |
1 | 1 | 1 | 1 |
1 | 1 | 1 | 1 |
0 | 0 | 1 | 0 |
가 되며 넓이는 9가 되므로 9를 반환해 주면 됩니다.
제한사항
표(board)는 2차원 배열로 주어집니다.
표(board)의 행(row)의 크기 : 1,000 이하의 자연수
표(board)의 열(column)의 크기 : 1,000 이하의 자연수
표(board)의 값은 1또는 0으로만 이루어져 있습니다.
입출력 예
board | answer |
[[0,1,1,1],[1,1,1,1],[1,1,1,1],[0,0,1,0]] | 9 |
[[0,0,1,1],[1,1,1,1]] | 4 |
입출력 예 설명
입출력 예 #1
위의 예시와 같습니다.
입출력 예 #2
| 0 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 |
로 가장 큰 정사각형의 넓이는 4가 되므로 4를 return합니다.
해설답안
class Solution {
public int solution(int[][] board) {
int answer = 0;
int dp[][] = new int[1001][1001];
int row = board.length;
int col = board[0].length;
for (int i = 1; i <= row; i++) {
for (int j = 1; j <= col; j++) {
if (board[i - 1][j - 1] != 0) {
dp[i][j] = Math.min(dp[i][j - 1], Math.min(dp[i - 1][j], dp[i - 1][j - 1])) + 1;
answer = Math.max(answer, dp[i][j]);
}
}
}
return answer*answer;
}
}
728x90
반응형
'Algorithm > 프로그래머스' 카테고리의 다른 글
[Level1] 두 개 뽑아서 더하기 (0) | 2020.11.27 |
---|---|
[프로그래머스] 알고리즘 문제 해설 - 땅따먹기 (0) | 2020.11.14 |
[프로그래머스] 알고리즘 문제 해설 - 순열 검사 (0) | 2020.11.13 |
[프로그래머스] 알고리즘 문제 해설 - 순열 검사 (0) | 2020.11.13 |
[프로그래머스] 알고리즘 문제 해설 - 자리수 더하기 (0) | 2020.11.13 |