프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
정사각형에 2차원 배열인거 보고 분할정복 생각했지만 천천히 다시 읽어보니 관련 없는 문제였다
0 | 1 | 1 | 1 |
1 | 1 | 1 | 1 |
1 | 1 | 1 | 1 |
0 | 0 | 1 | 0 |
위에서 우하단을 기준으로 좌상단, 우상단, 좌하단이 1이상이면 정사각형
여기서 우하단에 네 값 중 가장 작은 값 + 1을 하면 해당 정사각형의 한 변의 길이가 됨
0 | 1 | 1 | 1 |
1 | 1 | 2 | 2 |
1 | 2 | 2 | 3 |
0 | 0 | 1 | 0 |
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<vector<int>> board)
{
int answer = board[0][0];
int row = board.size();
int col = board[0].size();
// (1, 1)부터 시작 > 우하단을 기준으로 하기 때문
for(int i = 1; i < row; i++) {
for(int j = 1; j < col; j++) {
//0이면 정사각형이 불가능하고 1보다 크면 이미 확인한 구간이지만 중복된 구간을 체크하지 않기 때문에 1보다 클 일이 없음
if(board[i][j] == 1) {
board[i][j] = min({board[i-1][j-1], board[i-1][j], board[i][j-1]}) + 1;
answer = max(answer, board[i][j]);
}
}
}
return answer * answer;
}
'프로그래머스 > 2레벨' 카테고리의 다른 글
[프로그래머스/C++] 수식 최대화 (0) | 2024.03.10 |
---|---|
[프로그래머스/C++] 마법의 엘리베이터 (0) | 2024.03.08 |
[프로그래머스/C++] 시소 짝꿍 (0) | 2024.03.08 |
[프로그래머스/C++] 숫자 카드 나누기 (0) | 2024.03.08 |
[프로그래머스/C++] 문자열 압축 (0) | 2024.03.08 |