dp : 프로그래머스 - 가장 큰 정사각형

phoenixKim·2021년 8월 7일
0

풀이전략

1) 처음에는 정사각형이니까 우측 하단부가 1일 경우에 상하좌우를 일일 확인하는 방식으로 하려고 했는데, 정사각형이 클수록 효율이 좋지 않아지므로
이건 아니다 싶음

2) 정사각형을 작게 만들어보면서 생각해보면 다이나믹 프로그래밍으로 접근하면
풀수 있다고 생각함.

  • 2by 2 형식으로 우측하단부의 값을 변경하는 방식으로 규칙성을 찾을 수 있따.

알아야 할점

: min함수의 경우 여러개를 한번에 확인할때는 이렇게 사용한다.

소스코드

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int solution(vector<vector<int>> board)
{
    int row_size = board.size() - 1;
    int col_size = board.size() - 1;
    
    int answer = board[row_size][col_size];
    
    for(int i = 1; i < board.size(); i++)
    {
        for(int j = 1; j < board[i].size(); j++)
        {
            if(board[i][j] == 1)
            {
                 board[i][j] = min({board[i - 1][j],board[i - 1][j - 1], board[i][j -1]}) + 1;
                 answer = max(board[i][j], answer);
            }
           
        }
    }

    answer *= answer;
    return answer;
}
profile
🔥🔥🔥

0개의 댓글

관련 채용 정보