이문제 못풀었음.
DP 할 때 이전 단계가 이후 단계도 영향을 미치면서 점화식을 쓸 수 있을때 사용한다.
#include <iostream>
#include<vector>
#include <algorithm>
using namespace std;
int solution(vector<vector<int>> board)
{
int answer = board[0][0];
int iTemp;
for(int i=1; i<board.size(); i++)
{
for(int j=1; j<board[0].size(); j++)
{
if(board[i][j]!=0)
{
board[i][j] = min(board[i][j-1], board[i-1][j]);
board[i][j] = min(board[i][j], board[i-1][j-1])+1;
answer = max(answer, board[i][j]);
}
}
}
return answer*answer;
}
answer = 0; 을 하면 1경우 case나가는데, [0][0]해줘야 한다.
[점화식 관계]
board[i][j] = min(board[i][j-1], board[i-1][j]);
board[i][j] = min(board[i][j], board[i-1][j-1])+1;
3방향에서 제일 제일 작은거 +1해주는것이 핵심이다.