문제링크 : https://www.acmicpc.net/problem/1051
#include <bits/stdc++.h>
using namespace std;
int n, m;
int arr[50][50];
int main()
{
cin >> n >> m;
string input;
for (int i = 0; i < n; i++)
{
cin >> input; //숫자를 한줄로 입력받기에 스트링으로 받음
for (int j = 0; j < m; j++)
{
arr[i][j] = input[j] - '0'; //받은 문자열(숫자)를 하나하나 다시 숫자로 변환
}
}
int k = min(n, m); //정사각형의 최대 길이 저장
while (k--)
{
for (int i = 0; k + i < n; i++) //인덱스에 범위 값 설정 (k + i)
{
for (int j = 0; k + j < m; j++) //인덱스에 범위 값 설정 (k + j)
{
if (arr[i][j] == arr[i + k][j] && //찾는 조건
arr[i][j] == arr[i][j + k] &&
arr[i][j] == arr[i + k][j + k])
{
cout << (k + 1) * (k + 1); //넓이 출력
return 0; //while 문에서 가장 큰 값부터 출력하므로 찾으면 바로 종료
}
}
}
}
cout << 1; //못 찾았으면 1 출력 (최소 넓이)
}
for 문에서 인덱스를 이용하여 범위 값 설정을 할 수 있다.
k 값을 작은 값부터 시작하면 큰 값을 계속 갱신해야 하지만 큰 값부터 시작하면 처음 값이 최대 넓이이다.
'백준 > 실버' 카테고리의 다른 글
[백준 2583번] 영역 구하기 (C++) (0) | 2023.02.05 |
---|---|
[백준 1890번] 점프 (C++) (0) | 2023.02.05 |
[백준 16922] 로마 숫자 만들기 (C++) (0) | 2023.02.05 |
[백준 2841번] 외계인의 기타 연주 (C++) (0) | 2023.02.05 |
[백준 25644번] 최대 상승 (C++) (0) | 2023.02.05 |