
내가 작성한 코드
class Solution {
public int solution(int[][] board) {
int row = board.length;
int col = board[0].length;
int[][] dp = new int[row][col]; // 정사각형 한 변의 최대 길이 저장
int answer = 0; // 최대 정사각형 한 변 길이
// 초기값 복사
for (int i = 0; i < row; i++) {
dp[i][0] = board[i][0];
if (dp[i][0] > answer){
answer = dp[i][0];
}
}
for (int j = 0; j < col; j++) {
dp[0][j] = board[0][j];
if (dp[0][j] > answer) {
answer = dp[0][j];
}
}
// DP 진행
for (int i = 1; i < row; i++) {
for (int j = 1; j < col; j++) {
if (board[i][j] == 1) {
dp[i][j] = Math.min(Math.min(dp[i - 1][j], dp[i][j - 1]), dp[i - 1][j - 1]) + 1;
if (dp[i][j] > answer)
answer = dp[i][j];
}
}
}
return answer * answer; // 넓이 반환
}
}
다른 사람의 코드
class Solution {
public int solution(int[][] board) {
int answer = 0;
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[i].length; j++) {
if (board[i][j] > 0) {
// 위 , 좌 , 좌측 대각선 값을 찾아 그중 최소값 + 1 로 업데이트
int up = (j - 1 >= 0) ? board[i][j - 1] : 0;
int left = (i - 1 >= 0) ? board[i - 1][j] : 0;
int diagonal = (i - 1 >= 0 && j - 1 >= 0) ? board[i - 1][j - 1] : 0;
board[i][j] = Math.min(Math.min(up, left), diagonal) + 1;
answer = Math.max(answer, board[i][j]); // 최대값을 업데이트
}
}
}
return answer * answer;
}
}
Share article