[JAVA 문제 풀이] 392. 가장 큰 정사각형 찾기

프로그래머스 (12905)
Stupefyee's avatar
Jul 22, 2025
[JAVA 문제 풀이] 392. 가장 큰 정사각형 찾기
notion image
 

내가 작성한 코드

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

stupefyee