for문 여러개 중첩해서 풀었더니 정답은 나왔지만 효율성은 0점을 맞았다ㅎㅎ
효율성 검사가 있으니 DP 문제겠거니 싶어서 DP로 생각해서 풀려고 노력했다. 하지만 DP 문제플 푼지 너무 오래된 탓인지 풀리지 않았다! 그래서 구글링을 통해 답을 얻을 수 있었다.
extendBoard()
: 인덱스 검색의 용이함을 위해 board
의 좌상단에 패딩을 더해준다.newBoard[i][j]
를 갱신한다.maxSize
를 최댓값으로 갱신한다.class Solution {
public int solution(int[][] board) {
int[][] newBoard = extendBoard(board);
int maxSize = 0;
for (int i = 1; i < newBoard.length; i++)
for (int j = 1; j < newBoard[0].length; j++)
if (newBoard[i][j] != 0) {
newBoard[i][j] = Math.min(Math.min(newBoard[i - 1][j], newBoard[i - 1][j - 1]), newBoard[i][j - 1]) + 1;
maxSize = Math.max(maxSize, newBoard[i][j]);
}
return (int) Math.pow(maxSize, 2);
}
private int[][] extendBoard(int[][] board) {
int[][] newBoard = new int[board.length + 1][board[0].length + 1];
for (int i = 0; i < board.length; i++)
for (int j = 0; j < board[0].length; j++)
newBoard[i + 1][j + 1] = board[i][j];
return newBoard;
}
}