Koala - 19기/코딩테스트 심화 스터디
[백준/python] 1051번 : 숫자 정사각형
whiteys1
2025. 7. 13. 17:11
문제
N×M크기의 직사각형이 있다. 각 칸에는 한 자리 숫자가 적혀 있다. 이 직사각형에서 꼭짓점에 쓰여 있는 수가 모두 같은 가장 큰 정사각형을 찾는 프로그램을 작성하시오. 이때, 정사각형은 행 또는 열에 평행해야 한다.
입력
첫째 줄에 N과 M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 수가 주어진다.
출력
첫째 줄에 정답 정사각형의 크기를 출력한다.
코드
n,m = map(int,input().split())
a = min(n,m)
I = []
for _ in range(n) :
I.append(list(map(int, list(input().strip()))))
for size in range(a, 0, -1):
for i in range(n - size + 1):
for j in range(m - size + 1):
if (I[i][j] == I[i][j + size - 1] and
I[i][j] == I[i + size - 1][j] and
I[i][j] == I[i + size - 1][j + size - 1]):
print(size * size)
exit()
print(size*size)
코드풀이
사각형의 크기를 먼저 입력받는다.
가로 세로 중 작은 변의 길이를 고르고, 해당 길이부터 정사각형의 길이를 한칸씩 줄여가면서 테스트 해본다.
정사각형 테스트는 조건문에서 and를 써서 네 모서리를 확인한다.
현재 검사 상태가 최대인 경우이므로, 정사각형이 성립하면 바로 exit()를 통해 탈출한다.
답은 제곱형태로 출력한다.