728x90
반응형
1. 문제
https://www.acmicpc.net/problem/1051
2. 풀이과정
N*M크기의 직사각형에서 만들 수 있는 모든 정사각형에 대해
꼭짓점에 쓰여 있는 수가 모두 같은지 확인하며 정사각형 넓이의 최대값을 구해준다.
[코드설명]
check함수는 특정 점 (y, x)을 좌측상단 꼭짓점으로 하고
조건을 만족하는 정사각형의 넓이들 중 최대값을 반환해준다.
(조건 : 꼭짓점에 쓰여 있는 수가 모두 같아야 함)
가능한 모든 (y, x)조합에 대해 check함수를 이용해 탐색하여 해결한다.
3. 코드
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
int n, m;
vector<string> board;
int result = -1;
bool safe(int y, int x) {
return (0<=y && y<n) && (0<=x && x<m);
}
int check(int y, int x) {
int area = 1;
int key = board[y][x];
int ny = y, nx = x;
while(1) {
if(!safe(ny, nx)) break;
if(board[ny][nx] == key && board[y][nx] == key && board[ny][x] == key) area = (ny-y+1)*(ny-y+1);
ny++;
nx++;
}
return area;
}
int main()
{
cin.tie(NULL);
ios::sync_with_stdio(false);
cin >> n >> m;
board.resize(n);
for(int i=0; i<n; i++) {
cin >> board[i];
}
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
result = max(check(i, j), result);
}
}
cout << result;
return 0;
}
728x90
반응형
'💡 Problem Solving > Baekjoon' 카테고리의 다른 글
[백준 - 23247] Ten [C++] (0) | 2023.10.13 |
---|---|
[백준 - 1780] 종이의 개수 [C++] (0) | 2021.03.15 |
[백준 - 15988] 1, 2, 3 더하기 3 [C++] (0) | 2021.03.14 |
[백준 - 12101] 1, 2, 3 더하기 2 [C++] (1) | 2021.03.14 |
[백준 - 14500] 테트로미노 [C++] (0) | 2021.03.06 |