1로 구성된 가장 큰 정사각형을 찾는 문제이다.
정사각형의 넓이가 2이상일때 자신의 왼쪽, 위, 왼쪽 대각선위가 모두 1이상이여야하며 이때 하나라도 0이라면 정사각형이 될 수 없다.
2*2 정사각형을 보자면 오른쪽 아래를 기준으로 보자면 자신의 왼쪽, 위, 왼쪽 대각선위가 모두 1이여야 한다. 그렇게 생각해보자면 오른쪽 아래의 값이 2가 될 수 있다.
3*3을 보자면 자신의 왼쪽, 위, 왼쪽 대각선위가 모두 2여야 한다. 이때 오른쪽 아래의 값은 선분의 길이인 3이 된다.
이론을 이해하기 어려웠지만 익숙해지면 쉽게 풀 수 있을 것같다.
#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;
int solution(vector<vector<int>> board)
{
int answer = board[0][0];
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] = 1 + min({ board[i - 1][j],board[i][j - 1],board[i - 1][j - 1] }); //왼쪽,위,왼쪽 대각선 위
answer = max(answer, board[i][j]);
}
}
}
return answer * answer;
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][LV2][C++][3차] 방금그곡 (0) | 2024.05.15 |
---|---|
[프로그래머스][LV.2][C++]삼각 달팽이 (0) | 2024.05.06 |
[프로그래머스][LV0.][C++]겹치는 선분의 길이 & 안전지대 (4) | 2024.05.01 |
[프로그래머스][LV 2][C++] 시소 짝꿍 (0) | 2024.03.11 |
[프로그래머스][LV 1][C++] [PCCE 기출문제] 10번 / 데이터 분석 (1) | 2024.03.07 |