[문제 출처]
https://school.programmers.co.kr/learn/courses/30/lessons/12905
1. 문제
설명
1와 0로 채워진 표(board)가 있습니다. 표 1칸은 1 x 1 의 정사각형으로 이루어져 있습니다. 표에서 1로 이루어진 가장 큰 정사각형을 찾아 넓이를 return 하는 solution 함수를 완성해 주세요. (단, 정사각형이란 축에 평행한 정사각형을 말합니다.)
예를들어
가 있다면 가장 큰 정사각형의 넓이는 9가 되므로 9를 반환해 주면 됩니다.
제한사항
- 표(board)는 2차원 배열로 주어집니다.
- 표(board)의 행(row)의 크기 : 1,000 이하의 자연수
- 표(board)의 열(column)의 크기 : 1,000 이하의 자연수
- 표(board)의 값은 1또는 0으로만 이루어져 있습니다.
입출력 예
2. 설명
우선 값이 0이면 지나가고, 1일때 조건에 넣습니다. 현재좌표가 (1,1)이라면 상단, 좌단, 좌상단3가지 값중에서 가장큰것+1을 현재좌표의 값을 넣습니다. 이렇게 하면 만약 0이포함되어있으면 그대로1이고, 1만있을경우 2로 되는식입니다.
즉 다른값들이 있으면 원래값을 유지하고, 같은값들만 있을때 1을 증가시킵니다.
answer은 갱신한 값들중 가장 큰것을 저장하고, 넓이를 구해야하니 제곱을 해서 값을 반환하여 줍니다.
3. 코드
#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;
int solution(vector<vector<int>> board)
{
int answer = board[0][0];
for(int y=1; y<board.size(); y++){
for(int x=1; x<board[0].size();x++){
if(board[y][x]==1){
board[y][x]=1+min({board[y-1][x-1],board[y-1][x],board[y][x-1]});
answer=max({answer,board[y][x]});
}
}
}
return answer*answer;
}
반응형
'코테준비 > 수학적 알고리즘' 카테고리의 다른 글
[프로그래머스][C++][43105] 정수 삼각형 (0) | 2023.03.15 |
---|---|
[프로그래머스][C++][150369] 택배 배달과 수거하기 (0) | 2023.03.14 |
[프로그래머스][C++][12936] 줄 서는 방법 (0) | 2023.03.10 |
[프로그래머스][C++][62048] 멀쩡한 사각형 (0) | 2023.03.09 |
[프로그래머스][C++][135807] 숫자 카드 나누기 (0) | 2023.03.09 |
댓글